FAQ Perl/TkConsultez toutes les FAQ

Nombre d'auteurs : 3, nombre de questions : 86, dernière mise à jour : 24 mai 2013  Ajouter une question

 

Bienvenue sur la FAQ Perl/Tk. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions de Perl/Tk. N'hésitez pas à utiliser le moteur de recherche.

Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez

Bonne lecture !


SommaireLes Fenêtres de premier niveau (MainWindow, Toplevel...) (11)
précédent sommaire suivant
 

la méthode "title" permet de mettre un titre à la fenêtre Tk, sinon c'est le nom du script qui sera affiché.

Code perl : Sélectionner tout
$widget->title('Titre de mon widget');

Mis à jour le 23 février 2009 djibril

Il est possible de faire une fenêtre sans barre de titre, décors et contours.

Code perl : Sélectionner tout
1
2
# Pour enlever les décors 
$widget->overrideredirect(1);
N.B. Il vous sera impossible de fermer la fenêtre via la croix vu qu'il n'y a plus de barre, ainsi que de déplacer la fenêtre. Pensez à prévoir un bouton pour l'occasion !

Mis à jour le 9 décembre 2008 djibril

Il est possible de changer l'icône Tk qui est à gauche de la barre. Pour cela il faut utiliser la méthode iconimage.

Code perl : Sélectionner tout
$widget->iconimage($photo_icone);
N.B. $photo_icone est une référence à une image créée via la méthode Photo ou Bitmap.

Code perl : Sélectionner tout
1
2
3
use Tk::Photo; 
use Tk::PNG; 
my $photo_icone = $widget->Photo( -format => 'png', -file => 'C:/MonIcone.png' );

Mis à jour le 9 décembre 2008 djibril

Utilisez la méthode "protocole" qui contrôle les propriétés des fenêtres et notamment l'argument WM_DELETE_WINDOW. En y assignant une fonction de rappel nulle, rien ne se passera après un clic sur la croix en haut à droite de la fenêtre.

Code perl : Sélectionner tout
$widget->protocol( "WM_DELETE_WINDOW", sub { return; } );

Mis à jour le 18 décembre 2008 djibril

  • Coordonnées du coin supérieur gauche du widget, relativement à son parent

Code perl : Sélectionner tout
1
2
3
$widget->update; 
 my $x = $widget->x(); 
 my $y = $widget->y();
  • Coordonnées du coin supérieur gauche du widget, relativement à la fenêtre racine

Code perl : Sélectionner tout
1
2
3
$widget->update; 
 my $x = $widget->rootx(); 
 my $y = $widget->rooty();
Il est important de faire un update du widget, sinon vous obtiendrez les coordonnées (0,0).

Mis à jour le 9 décembre 2008 djibril

On peut constater qu'à chaque fois que l'on crée une fenêtre Tk, celle-ci est positionnée un peu aléatoirement à l'écran.
Utilisez la procédure centrer_widget du programme ci-dessous pour centrer vos widgets.

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl 
use warnings; 
use strict; 
use Tk;    # Appel du module Tk 
  
# Programme principal 
# Création de la fenêtre 
my $fenetre = new MainWindow( 
  -title      => 'Première fenêtre Tk', 
  -background => 'white', 
); 
  
# Taille minimale de ma fenêtre 
$fenetre->minsize( 300, 100 ); 
  
my $message_accueil = "Bonjour tout le monde\n\nWelcome dans le monde magnifique de Perl/Tk\n\n"; 
  
# Affichage d'un texte 
my $label_accueil = $fenetre->Label( 
  -text       => $message_accueil, 
  -background => 'white', 
)->pack(); 
  
# Affichage d'un bouton pour fermer la fenêtre 
my $bouton = $fenetre->Button( 
  -text    => 'Détruire la fenêtre', 
  -command => sub { exit; }, 
)->pack(); 
  
# Centrer ma fenêtre 
centrer_widget($fenetre); 
  
MainLoop;    # Obligatoire 
  
  
#================================================ 
# But : Centrer un widget automatiquement 
#================================================ 
sub centrer_widget { 
  my ( $widget ) = @_; 
  
  # Height and width of the screen 
  my $largeur_ecran = $widget->screenwidth(); 
  my $hauteur_ecran = $widget->screenheight(); 
  
  # update le widget pour récupérer les vraies dimensions 
  $widget->update; 
  my $largeur_widget = $widget->width; 
  my $hauteur_widget = $widget->height; 
  
  # On centre le widget en fonction de la taille de l'écran 
  my $nouvelle_largeur  = int( ( $largeur_ecran - $largeur_widget ) / 2 ); 
  my $nouvelle_hauteur  = int( ( $hauteur_ecran - $hauteur_widget ) / 2 ); 
  $widget->geometry($largeur_widget . "x" . $hauteur_widget  
  . "+$nouvelle_largeur+$nouvelle_hauteur"); 
  
  $widget->update; 
  
  return; 
}

Mis à jour le 10 décembre 2008 djibril

Pour fermer une fenêtre ou un widget, on utilise la méthode destroy. Elle permet de détruire le widget en question, ainsi que ses widgets fils s'il en existe.

Code perl : Sélectionner tout
$widget->destroy;
On peut également fermer la fenêtre avec exit.
Dans ce cas, ce sera le script qui sera brutalement terminé et tous les widgets seront fermés.

Code perl : Sélectionner tout
-command => { exit;},

Mis à jour le 20 janvier 2009 djibril

  • Icônifier ma fenêtre

Code perl : Sélectionner tout
$fenetre->iconify();
  • Rendre invisible ma fenêtre sans la détruire

Code perl : Sélectionner tout
$fenetre->withdraw();
  • Restaurer ma fenêtre

Code perl : Sélectionner tout
1
2
3
4
5
# si la fenêtre existe, je la restaure 
if ( Exists( $fenetre ) ) { 
	$fenetre->deiconify(); 
	$fenetre->raise(); 
}

Mis à jour le 10 décembre 2008 djibril

Code perl : Sélectionner tout
1
2
3
4
5
6
if ( $fenetre->ismapped() ) { 
  # => fenêtre affichée 
} 
else { 
  # => fenêtre pas affichée 
}

Mis à jour le 10 décembre 2008 djibril

Lorsque vous créez un widget de premier niveau avec MainWindow ou Toplevel, il se peut que ce dernier ne soit pas au premier plan. Pour pallier ce problème, il suffit de lui donner le focus clavier.

  • On force le widget à posséder le focus clavier

Code perl : Sélectionner tout
$widget->focus;
Il est aussi possible de forcer l'application à avoir le focus clavier même si cette dernière n'est pas active.

Code perl : Sélectionner tout
$widget->focusForce;
Pour en savoir plus sur les focus, consultez la documentation sur Perl/Tk et le focus.

Mis à jour le 2 novembre 2009 djibril

Si vous souhaitez qu'une fenêtre MainWindow ou Toplevel ne soit pas modifiable en hauteur, largeur ou les deux, il faut utiliser la méthode resizable. Cette méthode prend deux arguments (un pour la largeur et un autre pour la hauteur). Ces arguments seront égaux à 0 ou 1. 0 veut dire non modifiable et 1 modifiable.
Voici un exemple d'une fenêtre de 300x300 qui sera non modifiable :

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl 
use warnings; 
use strict; 
use Tk; 
  
my $fenetre = new MainWindow( -title => 'Resizable', ); 
$fenetre->geometry("300x300+50+50"); 
  
# Fenêtre non modifiable 
$fenetre->resizable(0,0); 
  
MainLoop;

Mis à jour le 24 avril 2010 djibril

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.