Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bug Tk::NoteBook - disparition des onglets

5 réponses
Avatar
genomart
Bonjour,

Je viens de me rendre compte d'un bug ( ou bien, sans n'est peut =EAtre
pas un, je l'esp=E8re).

Voici un script exemple :

#!/usr/bin/perl
use warnings;
use strict;
use Carp;

use Tk;
use Tk::NoteBook;


my $Fenetre =3D new MainWindow(
-title =3D> "test onglet",
-background =3D> "white",
);
$Fenetre->minsize(200,200);
my $BlocNote =3D $Fenetre->NoteBook()->pack;
my $test1 =3D $BlocNote->add( "test1", -label =3D> "test1", )->pack( -
side=3D> "top", -anchor =3D> "nw", -fill =3D> "both", -expand =3D> 1 );
my $test2 =3D $BlocNote->add( "test2", -label =3D> "test2", )->pack( -
side=3D> "top", -anchor =3D> "nw", -fill =3D> "both", -expand =3D> 1 );
my $test3 =3D $BlocNote->add( "test3", -label =3D> "test3", )->pack( -
side=3D> "top", -anchor =3D> "nw", -fill =3D> "both", -expand =3D> 1 );


foreach ($test1, $test2, $test3) {
my $Frame =3D $_->Labelframe(-label =3D> "test",)->pack;
$Frame->Label(-text =3D> "test",)->pack();
}
MainLoop;

Si on ex=E9cute ce script et qu'on se met sur l'onglet "test2" par
exemple. Tout fonctionne bien.
Augmentez le widget en cliquant sur le carr=E9 en haut =E0 droite, ou bien
r=E9duisez le widget via le - de la barre de progression, vous
constaterez que tous les onglets disparaissent.

Comment palier =E0 ce probl=E8me ?

Merci.

Djibril

5 réponses

Avatar
Paul Gaborit
À (at) Tue, 27 Jan 2009 15:26:50 -0800 (PST),
écrivait (wrote):
Je viens de me rendre compte d'un bug ( ou bien, sans n'est peut être
pas un, je l'espère).



Ça dépend la manière dont on veut voir les chose... ;-)

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 ?



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 - <http://perso.enstimac.fr/~gaborit/> Perl en français -
<http://perl.enstimac.fr/>
Avatar
genomart
On 28 jan, 09:45, Paul Gaborit wrote:
À (at) Tue, 27 Jan 2009 15:26:50 -0800 (PST),
écrivait (wrote):

> Je viens de me rendre compte d'un bug ( ou bien, sans n'est peut être
> pas un, je l'espère).

Ça dépend la manière dont on veut voir les chose... ;-)



> 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 b ien
> réduisez le widget via le - de la barre de progression, vous
> constaterez que tous les onglets disparaissent.

> Comment palier à ce problème ?

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 n e
passez aucun argument à 'pack'. Voici une version qui devrait
fonctionner de la manière prévue...



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.

##############################
#!/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.



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
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français -
<http://perl.enstimac.fr/>


Avatar
genomart
On 28 jan, 10:49, wrote:
On 28 jan, 09:45, Paul Gaborit wrote:



> À (at) Tue, 27 Jan 2009 15:26:50 -0800 (PST),
> écrivait (wrote):

> > Je viens de me rendre compte d'un bug ( ou bien, sans n'est peut êt re
> > pas un, je l'espère).

> Ça dépend la manière dont on veut voir les chose... ;-)

> > 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 ?

> 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 positi on,
> facteur d'expansion, etc. Les arguments passés à 'pack' lors de
> l'ajout de chaque page ne servent donc à rien. Par contre, le NoteBoo k
> 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...

Merci pour cette réponse. En effet, je ne m'étais pas rendu compte qu e
je n'avais pas besoin de fournir des options
à pack vu qu'elles sont les même dans add.



> ##############################
> #!/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.

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

> --
> Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français -
> <http://perl.enstimac.fr/>



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?
Avatar
genomart
On 28 jan, 11:33, wrote:
On 28 jan, 10:49, wrote:



> On 28 jan, 09:45, Paul Gaborit wrote:

> > À (at) Tue, 27 Jan 2009 15:26:50 -0800 (PST),
> > écrivait (wrote):

> > > Je viens de me rendre compte d'un bug ( ou bien, sans n'est peut être
> > > pas un, je l'espère).

> > Ça dépend la manière dont on veut voir les chose... ;-)

> > > 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 ?

> > 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 posi tion,
> > facteur d'expansion, etc. Les arguments passés à 'pack' lors de
> > l'ajout de chaque page ne servent donc à rien. Par contre, le NoteB ook
> > n'est pas géré, a priori, dans la fenêtre principale puisque vo us ne
> > passez aucun argument à 'pack'. Voici une version qui devrait
> > fonctionner de la manière prévue...

> 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.

> > ##############################
> > #!/usr/bin/perl
> > use warnings;
> > use strict;

> > use Tk;
> > use Tk::NoteBook;

> > my $Fenetre = new MainWindow(
> >                              -title      => "test onglet",
> >                              -backgroun d => "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 pac k
> > autorise une style un peu plus lisible à mon goût.

> 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

> > --
> > Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en françai s -
> > <http://perl.enstimac.fr/>

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à
Avatar
Paul Gaborit
À (at) Wed, 28 Jan 2009 05:40:37 -0800 (PST),
écrivait (wrote):
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.



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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>