Schrift
[thread]5260[/thread]

Frage zu Tk::Notebook



<< >> 7 Einträge, 1 Seite
Gast Gast
 2006-11-22 16:52
#45960 #45960
Hallo.

In der Manpage zu Tk::Notebook steht, dass sich mit der Option -dynamicgeometry die Geometrie der Hauptfensters an die groesse der enthaltenen Widgets anpassen lassen kann (So wie ich das verstanden hab).

es steht folgendermassen in meinem Code:

Code: (dl )
my $note = $main->NoteBook(-dynamicgeometry => 'true')->pack();


Nur leider wird es nach wie vor so dargestellt, dass die groesse des Hauptfensters so gross bleibt, wie das groesste Widget, welches man sich bereits angesehen hat, auch wenn das aktuelle Widget viel kleiner ist.

Sprich: Im ersten Reiter sind 5 Zeilen aufgefuehrt -> Groesse des Hauptfensters passt.
Wenn ich nun den Reiter mit den Vielen Elementen oeffne, wird das Hauptfenster so gross dargestellt, wie auf den Bildschirm vertikal passt.
Wenn ich jetzt wieder auf den Reiter wechsle, der die 5 Elemente beinhaltet, bleibt das Hauptfenster nach wie vor so gross wie vorher. Das Hauptfenster sollte sich hier aber an der groesse des jeweiligen Widgets anpassen.


Was mach ich an der Stelle falsch, bzw. wie bewerkstellige ich das so, wie ichs mir vorstelle?





greetz\n\n

<!--EDIT|mzwk|1164207246-->
ptk
 2006-11-22 22:51
#45961 #45961
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Kannst du mit dem Perl-Debugger umgehen? Dann schau mal nach, wie sich die Variablen in der Methode Resize in Tk/NoteBook.pm verhalten, insbesondere reqW und reqH.
pktm
 2007-03-23 12:37
#45962 #45962
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ich weis nicht ob der Hase da begraben liegt, aber nimm mal anstatt des 'true' eine 1. bei Abfragen der Firm if( $parameter ) sollte das zwar keinen Unterschied machen, aber vielleicht wird ja auf if( $parameter == 1 ) geprüft.
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2007-03-24 13:19
#45963 #45963
[quote=Guest,22.11.2006, 15:52]Hallo.

In der Manpage zu Tk::Notebook steht, dass sich mit der Option -dynamicgeometry die Geometrie der Hauptfensters an die groesse der enthaltenen Widgets anpassen lassen kann (So wie ich das verstanden hab).

es steht folgendermassen in meinem Code:

Code: (dl )
my $note = $main->NoteBook(-dynamicgeometry => 'true')->pack();


Nur leider wird es nach wie vor so dargestellt, dass die groesse des Hauptfensters so gross bleibt, wie das groesste Widget, welches man sich bereits angesehen hat, auch wenn das aktuelle Widget viel kleiner ist.

Sprich: Im ersten Reiter sind 5 Zeilen aufgefuehrt -> Groesse des Hauptfensters passt.
Wenn ich nun den Reiter mit den Vielen Elementen oeffne, wird das Hauptfenster so gross dargestellt, wie auf den Bildschirm vertikal passt.
Wenn ich jetzt wieder auf den Reiter wechsle, der die 5 Elemente beinhaltet, bleibt das Hauptfenster nach wie vor so gross wie vorher. Das Hauptfenster sollte sich hier aber an der groesse des jeweiligen Widgets anpassen.


Was mach ich an der Stelle falsch, bzw. wie bewerkstellige ich das so, wie ichs mir vorstelle?





greetz[/quote]
Das ist wohl ein bug in Tk::NoteBook,
Probier es mal so:

Code: (dl )
1
2
my $note = $main->NoteBook()->pack();
$note->{-dynamicgeometry}=1;


Christoph
Gast Gast
 2007-03-24 13:21
#45964 #45964
Oder vollständig:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;
use Tk;
my $mw = tkinit;

my $note = $mw->NoteBook()->pack();
$note->{-dynamicgeometry} = 1;
my @pages = map {$note->add("page$_")} (0..3);
for (0..3){$pages[0]->Label(-text => 'label')->pack;}
for (0..20){$pages[1]->Label(-text =>'label')->pack;}


MainLoop;
Gast Gast
 2007-03-24 23:40
#45965 #45965
Besser noch, code schreiben wie dokumentiert und bis zum nächsten Release fixen wie folgt:

Code: (dl )
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use strict;
use warnings;
use Tk;
use Tk::NoteBook;
package Tk::NoteBook;
{
no warnings 'redefine';
sub Resize {
my ($w) = @_;

return unless Tk::Exists($w) && $w->{'nWindows'} && $w->{'resize'};

$w->InitTabSize;

$w->{'resize'} = 0;
my $reqW = $w->{-width} || 0;
my $reqH = $w->{-height} || 0;

if ($reqW * $reqH == 0)
{
# if ((not defined $w->{-dynamicgeometry}) || # NoteBook.pm line 393
# ($w->{-dynamicgeometry} == 0)) {
unless ($w->cget('-dynamicgeometry')){
$reqW = 1;
$reqH = 1;

my $childw;
foreach $childw ($w->page_widget)
{
my $cW = $childw->ReqWidth;
my $cH = $childw->ReqHeight;
$reqW = $cW if ($reqW < $cW);
$reqH = $cH if ($reqH < $cH);
}
} else {
if (defined $w->{'topchild'}) {
my $topw = $w->page_widget($w->{'topchild'});
$reqW = $topw->ReqWidth;
$reqH = $topw->ReqHeight;
} else {
$reqW = 1;
$reqH = 1;
}
}
$reqW += $w->{'pad-x1'} + $w->{'pad-x2'} + 2 * (defined $w->{-ipadx} ? $w->{-ipadx} : 0);
$reqH += $w->{'pad-y1'} + $w->{'pad-y2'} + 2 * (defined $w->{-ipady} ? $w->{-ipady} : 0);
$reqW = ($reqW > $w->{'minW'}) ? $reqW : $w->{'minW'};
$reqH = ($reqH > $w->{'minH'}) ? $reqH : $w->{'minH'};
}
if (($w->ReqWidth != $reqW) ||
($w->ReqHeight != $reqH)) {
$w->{'counter'} = 0 if (not defined $w->{'counter'});
if ($w->{'counter'} < 50) {
$w->{'counter'}++;
$w->GeometryRequest($reqW, $reqH);
$w->afterIdle([$w,'Resize']);
$w->{'resize'} = 1;
return;
}
}
$w->{'counter'} = 0;
$w->raise($w->{'topchild'} || ${$w->{'windows'}}[0]);
$w->{'resize'} = 0;
}
}

package main;
my $mw = tkinit;

my $note = $mw->NoteBook(-dynamicgeometry => 1)->pack();
my @pages = map {$note->add("page$_")} (0..3);
for (0..3){$pages[0]->Label(-text => 'label')->pack;}
for (0..20){$pages[1]->Label(-text =>'label')->pack;}


MainLoop;
ptk
 2007-03-24 23:44
#45966 #45966
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
In der nächsten Version von Tk wird der Bug gefixt sein.
<< >> 7 Einträge, 1 Seite



View all threads created 2006-11-22 16:52.