Bug Tk::NoteBook - disparition des onglets
Le
genomart
Bonjour,
Je viens de me rendre compte d'un bug ( ou bien, sans n'est peut être
pas un, je l'espère).
Voici un script exemple :
#!/usr/bin/perl
use warnings;
use strict;
use Carp;
use Tk;
use Tk::NoteBook;
my $Fenetre = new MainWindow(
-title => "test onglet",
-background => "white",
);
$Fenetre->minsize(200,200);
my $BlocNote = $Fenetre->NoteBook()->pack;
my $test1 = $BlocNote->add( "test1", -label => "test1", )->pack( -
side=> "top", -anchor => "nw", -fill => "both", -expand => 1 );
my $test2 = $BlocNote->add( "test2", -label => "test2", )->pack( -
side=> "top", -anchor => "nw", -fill => "both", -expand => 1 );
my $test3 = $BlocNote->add( "test3", -label => "test3", )->pack( -
side=> "top", -anchor => "nw", -fill => "both", -expand => 1 );
foreach ($test1, $test2, $test3) {
my $Frame = $_->Labelframe(-label => "test",)->pack;
$Frame->Label(-text => "test",)->pack();
}
MainLoop;
Si on exécute ce script et qu'on se met sur l'onglet "test2" par
exemple. Tout fonctionne bien.
Augmentez le widget en cliquant sur le carré en haut à droite, ou bien
réduisez le widget via le - de la barre de progression, vous
constaterez que tous les onglets disparaissent.
Comment palier à ce problème ?
Merci.
Djibril
Je viens de me rendre compte d'un bug ( ou bien, sans n'est peut être
pas un, je l'espère).
Voici un script exemple :
#!/usr/bin/perl
use warnings;
use strict;
use Carp;
use Tk;
use Tk::NoteBook;
my $Fenetre = new MainWindow(
-title => "test onglet",
-background => "white",
);
$Fenetre->minsize(200,200);
my $BlocNote = $Fenetre->NoteBook()->pack;
my $test1 = $BlocNote->add( "test1", -label => "test1", )->pack( -
side=> "top", -anchor => "nw", -fill => "both", -expand => 1 );
my $test2 = $BlocNote->add( "test2", -label => "test2", )->pack( -
side=> "top", -anchor => "nw", -fill => "both", -expand => 1 );
my $test3 = $BlocNote->add( "test3", -label => "test3", )->pack( -
side=> "top", -anchor => "nw", -fill => "both", -expand => 1 );
foreach ($test1, $test2, $test3) {
my $Frame = $_->Labelframe(-label => "test",)->pack;
$Frame->Label(-text => "test",)->pack();
}
MainLoop;
Si on exécute ce script et qu'on se met sur l'onglet "test2" par
exemple. Tout fonctionne bien.
Augmentez le widget en cliquant sur le carré en haut à droite, ou bien
réduisez le widget via le - de la barre de progression, vous
constaterez que tous les onglets disparaissent.
Comment palier à ce problème ?
Merci.
Djibril

Poser une question


écrivait (wrote):
Ça dépend la manière dont on veut voir les chose... ;-)
Ce qu'il faut comprendre, c'est que toutes les pages d'un NoteBook
sont gérées par le NoteBook lui-même. En particulier, leur position,
facteur d'expansion, etc. Les arguments passés à 'pack' lors de
l'ajout de chaque page ne servent donc à rien. Par contre, le NoteBook
n'est pas géré, a priori, dans la fenêtre principale puisque vous ne
passez aucun argument à 'pack'. Voici une version qui devrait
fonctionner de la manière prévue...
##############################
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
use Tk::NoteBook;
my $Fenetre = new MainWindow(
-title => "test onglet",
-background => "white",
);
$Fenetre->minsize(200,200);
my $BlocNote = $Fenetre->NoteBook()
->pack(qw/-side top -anchor n -fill both -expand 1/);
my $test1 = $BlocNote->add("test1", -label => "test1")->pack();
my $test2 = $BlocNote->add("test2", -label => "test2")->pack();
my $test3 = $BlocNote->add("test3", -label => "test3")->pack();
foreach ($test1, $test2, $test3) {
my $Frame = $_->Labelframe(-label => "test")->pack();
$Frame->Label(-text => "test")->pack();
}
MainLoop;
##############################
Au passage, la syntaxe via qw/.../ pour écrire les arguments de pack
autorise une style un peu plus lisible à mon goût.
--
Paul Gaborit -
Merci pour cette réponse. En effet, je ne m'étais pas rendu compte que
je n'avais pas besoin de fournir des options
à pack vu qu'elles sont les même dans add.
Ouais, c'est une histoire de goût. En terme de lisibilité et de
maintenance, je ne sais pas vraiment laquelle choisir.
En tout cas merci pour ce message, je vais pouvoir debugguer certains
de mes scripts :-).
Cordialement,
Djibril
Je rencontre maintenant un autre problème, voici le script
##########################################################
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
use Tk::NoteBook;
my $Fenetre = new MainWindow(
-title => "test onglet",
-background => "white",
);
$Fenetre->minsize(200,200);
my $BlocNote = $Fenetre->NoteBook()->pack(qw/-side top -anchor n -fill
both -expand 1/);
my $test1 = $BlocNote->add("test1", -label => "test1n", )->pack();
my $test2 = $BlocNote->add("test2", -label => "test2n")->pack();
my $test3 = $BlocNote->add("test3", -label => "test3n")->pack();
foreach ($test1, $test2, $test3) {
my $Frame = $_->Labelframe(-label => "test", -background =>
"yellow")->pack();
$Frame->Label(-text => "testntestntest")->pack();
}
MainLoop;
################################
Si on se met sur l'onglet 2 ou 3 et qu'on augmente le widget, le
contenu de l'onglet 1 déborde. et s'affiche au même niveau que les
entêtes des onglets.
Une idée?
Je me réponds et espère que ça aidera d'autres personnes.
Il ne faut pas du tout utiliser la méthode pack sur les objets
notebook pour créer un onglet. Et après tout fonctionne parfaitement.
Script exemple :
######################################
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
use Tk::NoteBook;
my $Fenetre = new MainWindow(
-title => "test onglet",
-background => "white",
);
$Fenetre->minsize(200,200);
my $BlocNote = $Fenetre->NoteBook()->pack(qw/-side top -anchor n -fill
both -expand 1/);
my $test1 = $BlocNote->add("test1", -label => "test1n");
my $test2 = $BlocNote->add("test2", -label => "test2n");
my $test3 = $BlocNote->add("test3", -label => "test3n");
foreach ($test1, $test2, $test3) {
my $Frame = $_->Labelframe(-label => "test", -background =>
"yellow")->pack();
$Frame->Label(-text => "testntestntest")->pack();
}
MainLoop;
#######################################
Voilà
écrivait (wrote):
C'est ce que je vous disais dans ma première réponse... Mais dans mon
exemple de code, j'ai oublié de supprimer les appels. J'avais juste
supprimé les paramètres. Désolé...
--
Paul Gaborit - Perl en français -