perl/TK alignement de boutons

perl/TK alignement de boutons - Perl - Programmation

Marsh Posté le 19-09-2002 à 11:42:07    

salut
 
je suis en train de decouvrir le perl/TK
et je souhaite placer 40 boutons sur une fenetre mais comme ils ne rentrent pas tous verticalement ou horizontalement je voudrais les aligner sur deux colonnes mais je n'arrive pas a le faire...
 
connaissez vous le moyen d'y arriver
merci

Reply

Marsh Posté le 19-09-2002 à 11:42:07   

Reply

Marsh Posté le 19-09-2002 à 12:55:31    

circeedevalette a écrit a écrit :

salut
 
je suis en train de decouvrir le perl/TK
et je souhaite placer 40 boutons sur une fenetre mais comme ils ne rentrent pas tous verticalement ou horizontalement je voudrais les aligner sur deux colonnes mais je n'arrive pas a le faire...
 
connaissez vous le moyen d'y arriver
merci



si tu as une doc, je te conseille fortement de la lire  ;)
 
une p'tite url : http://www.cavi.univ-paris3.fr/ilp [...] perlintro/
 
je pense que tu utilise la méthode pack(), zieute un peu si ça donnerait po mieux avec grid() ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 19-09-2002 à 14:08:56    

je connaisait pas l'option grid merci!
 
mais pour avoir l'affichage (comme avec pack) on fait comment,
faut faire un "->gridColumnconfigure" avant le "->grid(-column => 0);" ?
parce que sinon j'ai pas d'affichage

Reply

Marsh Posté le 19-09-2002 à 15:17:13    

circeedevalette a écrit a écrit :

je connaisait pas l'option grid merci!
 
mais pour avoir l'affichage (comme avec pack) on fait comment,
faut faire un "->gridColumnconfigure" avant le "->grid(-column => 0);" ?
parce que sinon j'ai pas d'affichage



je n'utilise pas grid() mais ce que je sais, c'est qu'il vaut mieux n'utiliser qu'une seule méthode de gestion des objets sur le même widget
 
si tu utilise du pack() dans le code de ta widget et que tu insères du grid(), la cohabitation entre pack et grid == pas bon !


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 20-09-2002 à 10:45:14    

salut aricoh!
en fait, pour utiliser grid faut faire d'abord :
 
configuration des lignes :
$MW->gridRowconfigure(1, -weight  => 0, -minsize  => 30);
configuration des colonnes :
$MW->gridColumnconfigure(1, -weight => 0, -minsize => 30);
$MW->gridColumnconfigure(2, -weight => 1, -minsize => 30);
 
puis utiliser grid :
 $Nom_Bouton1->grid(
   -in => $MW,
   -column => '1',
   -row => '1',
 );
 
sinon maintenant que j'arrive a aligner mes radiobuttons,
je n'arrive pas a recuperer la donnée "bouton1 coché" pour l'utiliser dans le rest de mon programme perl
 

Reply

Marsh Posté le 20-09-2002 à 12:01:44    

circeedevalette a écrit a écrit :

sinon maintenant que j'arrive a aligner mes radiobuttons,
je n'arrive pas a recuperer la donnée "bouton1 coché" pour l'utiliser dans le rest de mon programme perl



 
je crois savoir  :)
 
Exemple perso :
 
dans un programme qui crée ses fichiers de sortie sur disque dur local ou sur le réseau (au choix du user), j'ai fait un bout de code comme ceci :
 

Code :
  1. my $ValueLocal;
  2. my $ValueRezo;


 
ce sont juste 2 malheureuses variables toutes simples
 
à côté de ça, j'ai 2 cases à cocher que voici :
 

Code :
  1. $mwBrRezo = $mw->Checkbutton(
  2. -text=>"Export sur réseau",
  3. -relief=>'ridge',
  4. -width=>20,
  5. -variable=>\$ValueRezo,
  6.         )->pack;
  7. $mwBrLocal = $mw->Checkbutton(
  8. -text=>"Export sur disque dur",
  9. -relief=>'ridge',
  10. -width=>20,
  11. -variable=>\$ValueLocal,
  12.         )->pack;


 
à vérifier avec la méthode grid() mais je crois que ce qu'il te manque, c'est l'option -variable=>\$ma_variable
 
Maintenant, passons aux explications : si dans mon exemple, le user veut une création des fichiers sur le disque dur, il coche la case "Export sur disque dur", case nommée $mwBrLocal. Comme elle renvoie implicitement à la variable $ValueLocal, cette dernière vaut 1 si la case est cochée, sinon 0 si case non cochée
 
Lors de ton traitement, il devient alors fastoche de faire ton traitement en fonction des cases cochées, il suffit juste de tester si les variables vers lesquelles elles renvoient sont vraies (1) ou fausses (undef ou 0)


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 20-09-2002 à 12:21:13    

Tiens, ce script t'expliquera sans doute mieux le truc (je viens de le créer et l'ai testé, il marche) :
 

Code :
  1. use strict;
  2. use Tk;
  3. # variables pour cases à cocher :
  4. my $toto;
  5. my $pouet;
  6. # variables de la widget Tk :
  7. my $widget;  # fenêtre
  8. my $zonetexte; # zone de texte
  9. my $caseTOTO; # case pour toto
  10. my $casePOUET; # case pour pouet
  11. my $bouton;  # bouton de l'appli
  12. # mise en place de la widget :
  13. $widget = MainWindow->new();
  14. $zonetexte = $widget->Text(
  15. -width=>100,
  16. -height=>23,
  17. )->pack;
  18. $caseTOTO = $widget->Checkbutton(
  19. -text=>"je coche toto",
  20. -variable=>\$toto,
  21. )->pack;
  22. $casePOUET = $widget->Checkbutton(
  23. -text=>"je coche pouet",
  24. -variable=>\$pouet,
  25. )->pack;
  26. $bouton = $widget->Button(
  27. -text=>"Kissétikécoché ?",
  28. -command=>sub { FonctionTest() },
  29. )->pack;
  30. MainLoop();
  31. sub FonctionTest {
  32. if ($toto) {
  33.  $zonetexte->insert('end', "toto est coché\n" );
  34. }
  35. if ($pouet) {
  36.  $zonetexte->insert('end', "pouet est coché\n" );
  37. }
  38. if (! $toto && ! $pouet) {
  39.  $zonetexte->insert('end', "aucun bouton coché\n" );
  40. }
  41. }


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 20-09-2002 à 16:24:10    

Aricoh a écrit a écrit :

Tiens, ce script t'expliquera sans doute mieux le truc (je viens de le créer et l'ai testé, il marche) :
 

Code :
  1. use strict;
  2. use Tk;
  3. # variables pour cases à cocher :
  4. my $toto;
  5. my $pouet;
  6. # variables de la widget Tk :
  7. my $widget;  # fenêtre
  8. my $zonetexte; # zone de texte
  9. my $caseTOTO; # case pour toto
  10. my $casePOUET; # case pour pouet
  11. my $bouton;  # bouton de l'appli
  12. # mise en place de la widget :
  13. $widget = MainWindow->new();
  14. $zonetexte = $widget->Text(
  15. -width=>100,
  16. -height=>23,
  17. )->pack;
  18. $caseTOTO = $widget->Checkbutton(
  19. -text=>"je coche toto",
  20. -variable=>\$toto,
  21. )->pack;
  22. $casePOUET = $widget->Checkbutton(
  23. -text=>"je coche pouet",
  24. -variable=>\$pouet,
  25. )->pack;
  26. $bouton = $widget->Button(
  27. -text=>"Kissétikécoché ?",
  28. -command=>sub { FonctionTest() },
  29. )->pack;
  30. MainLoop();
  31. sub FonctionTest {
  32. if ($toto) {
  33.  $zonetexte->insert('end', "toto est coché\n" );
  34. }
  35. if ($pouet) {
  36.  $zonetexte->insert('end', "pouet est coché\n" );
  37. }
  38. if (! $toto && ! $pouet) {
  39.  $zonetexte->insert('end', "aucun bouton coché\n" );
  40. }
  41. }






 
 
ok pour les checkbuton mais comment on fait pour obliger l'utilisateur a n'en cocher qu'un seul?
 
en VC++ on peut affecter la valeur 0 a la variable du checkbuton mais en TK il ne veut pas ...

Reply

Marsh Posté le 23-09-2002 à 08:18:53    

circeedevalette a écrit a écrit :

ok pour les checkbuton mais comment on fait pour obliger l'utilisateur a n'en cocher qu'un seul?en VC++ on peut affecter la valeur 0 a la variable du checkbuton mais en TK il ne veut pas ...



A moins qu'il y ait un code évènement pour décocher un checkbutton si le user en a coché un autre, je ne crois pas que ça marche sur l'appli graphique et ses widgets
 
à toi de rajouter une vérif dans ton code : est-ce que + d'1 bouton coché ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 24-09-2002 à 14:26:05    

salut  
j'avance bien dans le developpement de mon interface graphique
 
mais il me reste un petit probleme avec une Dialog box.
en effet, je declare ma Dialog box:

Citation :

 $DIALOG_ERREUR = $MW->Dialog(-title => 'Type_',
                              -text    => "il faut selectionner les type avant\n\td essayer d'appuyer sur le bouton",
                              -buttons => ['Ok'],);

 
 
si je l'appele directement  
 

Citation :

 $bouton_groupe -> command(-label => 'TOTO',
                            -command => [$DIALOG_ERREUR => 'Show'],

 
j'ai bien le message d'erreur qui s'affiche
 
mais si je fais :
 

Citation :

 $bouton_groupe -> command(-label => 'TOTO',
                            -command => sub{($Type1==0 && $type2==0 && $type3==0) ? [$DIALOG_ERREUR => 'Show'] : Generation_groupe('D';)},

 
je n'ai pas de message d'erreur
 
je pense que ca vient du fait que je sois dans une sous fonction (sub) mais je ne sais pas comment faire du coup

Reply

Marsh Posté le 24-09-2002 à 14:26:05   

Reply

Marsh Posté le 24-09-2002 à 14:31:30    

en faisant une recherche hier soir sur google, je suis tombé sur cette url :
 
http://www.le-berre.com/perl/perlxtd.htm
 
dedans, on explique qu'avec le module win32, tu peux faire des messagebox (boites de dialogue) comme sous Visual Basic, exemple de code :
 

Code :
  1. use Win32;
  2. Win32::MsgBox("A first step for Perl in the Windows GUI world !" );
  3. Win32::MsgBox('Bug detected',48,'Alert ! Alert');
  4. $result = Win32::MsgBox('Meet me at the coffee machine ?', 16+4, 'Tired ?');
  5. (($result == 6) ? print "I am on my way !\n" : print "bye !\n" );


 
sur ma distrib Perl (5.6.1), le module win32 est installé d'office
 
j'ai essayé ce source et ... ça marche plutôt super bien  :)
 
c'est en tout cas moins lourdingue que de faire l'équivalent en Perl/Tk
 
va faire un tour sur l'url ci-dessus, t'as vraiment de bons tuyaux pour faire des msgbox et autres


Message édité par Aricoh le 24-09-2002 à 14:32:31

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 24-09-2002 à 15:01:43    

Aricoh a écrit a écrit :

en faisant une recherche hier soir sur google, je suis tombé sur cette url :
 
http://www.le-berre.com/perl/perlxtd.htm
 
dedans, on explique qu'avec le module win32, tu peux faire des messagebox (boites de dialogue) comme sous Visual Basic, exemple de code :
 

Code :
  1. use Win32;
  2. Win32::MsgBox("A first step for Perl in the Windows GUI world !" );
  3. Win32::MsgBox('Bug detected',48,'Alert ! Alert');
  4. $result = Win32::MsgBox('Meet me at the coffee machine ?', 16+4, 'Tired ?');
  5. (($result == 6) ? print "I am on my way !\n" : print "bye !\n" );


 
sur ma distrib Perl (5.6.1), le module win32 est installé d'office
 
j'ai essayé ce source et ... ça marche plutôt super bien  :)
 
c'est en tout cas moins lourdingue que de faire l'équivalent en Perl/Tk
 
va faire un tour sur l'url ci-dessus, t'as vraiment de bons tuyaux pour faire des msgbox et autres




 
merci beaucoup,
c'est exactement ce que j'essayais de faire en tk et c'est drolement plus simple

Reply

Marsh Posté le 24-09-2002 à 15:02:36    

circeedevalette a écrit a écrit :

 
c'est exactement ce que j'essayais de faire en tk et c'est drolement plus simple  



c'est exactement ce que je me suis dit  :D


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 24-09-2002 à 15:05:16    

C'est surtout nettement moins portable.

Reply

Marsh Posté le 24-09-2002 à 15:07:35    

lorill a écrit a écrit :

C'est surtout nettement moins portable.



effectivement mais si le prog est censé bosser que sur architecture win32 ... ben la portabilité, on s'en fiche un ch'tit peu  :D


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Marsh Posté le 24-09-2002 à 15:16:08    

Si tu fais tout en win32, pourquoi pas, mais si tu fais tout en tk et que tu utilises win32 juste pour les messagebox, ben c'est dommage de sacrifier la portabilité pour eviter d'ecrire 2 fonctions... C'est pas parce que tu ne vises que win aujourd'hui que ca restera vrai ad vitam aeternam...

Reply

Marsh Posté le 24-09-2002 à 15:20:45    

lorill a écrit a écrit :

Si tu fais tout en win32, pourquoi pas, mais si tu fais tout en tk et que tu utilises win32 juste pour les messagebox, ben c'est dommage de sacrifier la portabilité pour eviter d'ecrire 2 fonctions... C'est pas parce que tu ne vises que win aujourd'hui que ca restera vrai ad vitam aeternam...



d'accord avec toi, no problemo là-dessus, mais l'inverse est vrai : ce n'est pas parce que Perl est un langage portable à souhait qu'on doit automatiquement et obligatoirement pondre du code portable également
 
maintenant, si circeedevalette veut nous montrer ce que fait sa fonction exactement, on pourra pitet' trouver ce qui coince ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed