User since
2007-10-05
31
articles
BenutzerIn
hab ich hier irgendwo einen Denkfehler oder warum expandiert mein Canvas nicht wenn ich das "Fenster" größer ziehe?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use Tk;
use Tk::Pane;
my $mw = MainWindow->new;
my $fr = $mw->Frame(-background=> 'black', -width=>"50", -height=>"500") ->pack(qw/ -side right -anchor nw /);
my $fm = $mw->Scrolled("Pane",-background=> 'green', -width=>"500", -height=>"500")->pack(-fill => "both", -side =>'left', -expand => 1);
my $pane = $fm->Subwidget("scrolled");
Tk::bind($pane, '<MouseWheel>', [ sub {$fm->yview('scroll',-($_[1] / 120)
* 3,'units')}, Ev('D')]);
$pane->focus;
$pane->Walk(sub {
$_[0]->bindtags([$pane, $_[0]->bindtags]);
});
my $c1 = $fm->Canvas( -width=> 500, -height=> 500, -bg=> 'white', -borderwidth=> '1')->pack(-expand=>1, -fill=>'both');
MainLoop;
Der Sinn des ganzen soll sein, dass wenn ich etwas zeichne was größer als die vorhandene Canvasgröße ist soll man scrollen können.
Geht das so überhaupt?
Danke
Wenn du bei einem Canvas scrollen möchtest, musst du -scrollregion bei den Canvas Optionen mit angeben.
Du musst auch keinen Pane mit Scrollbars erstellen, sondern kannst einfach ein Scrolled('Canvas') erstellen, aber vorsicht: bei bestimmten Canvas Funktionen brauchst du das "richtige" Canvas, also das: $c -> Subwidget("scrolled").
MfG Horst
User since
2003-11-28
3645
articles
ModeratorIn
Tk::Pane verhält sich ein bisschen anders als normale Tk-Widgets. Wenn die Kinder expandieren sollen, muss man im Pane -sticky => "news" angeben.
Oder man macht es so wie Horst es vorgeschlagen hat.