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 !
- Comment changer le titre d'un widget ?
- Comment faire une fenêtre sans décors (barre des titres, contours) ?
- Comment changer l'icône de la fenêtre de mon application ?
- Comment empêcher la fermeture de ma fenêtre lors d'un clic sur la croix en haut à droite ?
- Comment connaître la position de mon widget ?
- Comment centrer ses widgets de premier niveau ?
- Comment fermer une fenêtre ou un widget ?
- Comment icônifier, rendre invisible et restaurer ma fenêtre ?
- Comment savoir si une fenêtre est affichée ?
- Comment mettre une fenêtre au premier plan ?
- Comment empêcher le redimensionnement d'une fenêtre ?
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');
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); |
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);
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' ); |
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; } );
- 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(); |
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; } |
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;
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;},
- 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(); } |
Code perl : | Sélectionner tout |
1 2 3 4 5 6 | if ( $fenetre->ismapped() ) { # => fenêtre affichée } else { # => fenêtre pas affichée } |
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;
Code perl : | Sélectionner tout |
$widget->focusForce;
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; |
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 çaLes 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 © 2024 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.