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 !
Un cadre est un support sur lequel vous pouvez placer des widgets (bouton, texte...). Il est aussi très utilisé pour gérer l'alignement des widgets lorsque l'on utilise le gestionnaire d'espace pack. Sachez aussi qu'un cadre est invisible tant qu'il ne contient aucun widget. La création d'un cadre est très simple, il suffit d'utiliser le widget Tk::Frame.
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 | #!/usr/bin/perl use strict; use warnings; use Tk; my $fenetre_principale = MainWindow->new( -title => 'Cadres' ); $fenetre_principale->minsize(300,300); my $cadre1 = $fenetre_principale->Frame( -background => '#CCCCFF', )->pack( qw/ -fill both -expand 1/ ); $cadre1->Label( -text => 'text1 cadre1' )->pack( -side => 'left'); $cadre1->Label( -text => 'text2 cadre1' )->pack( -side => 'right'); my $cadre2 = $fenetre_principale->Frame( -background => 'red', )->pack( qw/ -fill x/ ); $cadre2->Button( -text => 'quitter', -command => sub { exit;} )->pack(); MainLoop; |
Un cadre légende ou LabFrame est identique à un cadre. Il est nécessaire de faire appel au module Tk::LabFrame, sinon vous aurez un message d'avertissement. Par contre il est inutile de l'installer car il est présent dans le core de Tk.
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 | #!/usr/bin/perl use strict; use warnings; use Tk; use Tk::LabFrame; my $fenetre_principale = MainWindow->new( -title => 'Cadres' ); $fenetre_principale->minsize(300,300); my $cadre1 = $fenetre_principale->LabFrame( -label => 'Mon titre cadre', -background => '#CCCCFF', )->pack( qw/ -fill both -expand 1/ ); $cadre1->Label( -text => 'text1 cadre1' )->pack( -side => 'left'); $cadre1->Label( -text => 'text2 cadre1' )->pack( -side => 'right'); my $cadre2 = $fenetre_principale->Frame( -background => 'red', )->pack( qw/ -fill x/ ); $cadre2->Button( -text => 'quitter', -command => sub { exit;} )->pack(); MainLoop; |
Il est possible de créer un cadre contenant une barre de défilement. C'est très pratique lorsque l'on a beaucoup d'éléments à afficher dans une fenêtre. On a l'habitude d'utiliser scrolled avec les widgets Text, mais avec Frame, ça ne fonctionne pas !! La solution est d'utiliser le widget Tk::Pane. Il fournit un cadre scrollable ! Il faut charger le module Tk::Pane, mais il est inutile de l'installer car il est présent dans le core de Perl/Tk.
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 | #!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Pane; my $fenetre_principale = MainWindow->new( -title => 'Pane' ); $fenetre_principale->minsize(300,300); my $pane = $fenetre_principale->Scrolled('Pane', -scrollbars => 'sw', -sticky => 'nswe', -background => '#CCCCFF', )->pack( qw/ -fill both -expand 1/ ); $pane->Frame; $pane->Label( -text => 'text1 cadre1' )->pack( -side => 'left'); $pane->Label( -text => 'text2 cadre1' )->pack( -side => 'right'); my $cadre2 = $fenetre_principale->Frame( -background => 'red', )->pack( qw/ -fill x/ ); $cadre2->Button( -text => 'quitter', -command => sub { exit;} )->pack(); MainLoop; |
Lorsque vous créez un cadre avec une taille donnée, à l'insertion de widgets à l'intérieur du cadre, ce dernier réadapte automatiquement sa taille en fonction du contenu. Pour désactiver ce comportement, il faut utiliser les méthodes du gestionnaire d'espaces. Si vous utilisez pack, utiliser la méthode packPropagate avec 0 ou off en argument.
Code perl : | Sélectionner tout |
1 2 3 | $cadre->packPropagate(0); # ou $cadre->packPropagate('off'); |
Code perl : | Sélectionner tout |
1 2 3 | $cadre->gridPropagate(0); # ou $cadre->gridPropagate('off'); |
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.