Schrift
[thread]5269[/thread]

tk scrolled canvas

Leser: 3


<< >> 5 Einträge, 1 Seite
PerlProfi
 2006-12-17 20:52
#46028 #46028
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich hatte ja vor einigen Tagen ein Problem damit, dass ein Tk::bind auf mein scrolled canvas nicht funktioniert hat, der frame von scrolled wurde an das Ereignis gebunden.

Wobei kann ich mir denn jetzt sicher sein, dass es funktioniert und wobei nicht?
raise() und lower() funktionieren schonmal nicht, aber gibt es Einschränkungen beim zeichnen, oder sonst noch Einschränkungen(ausser bind)??

MfG PerlProfi
ptk
 2006-12-18 00:54
#46029 #46029
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Es gibt einige Methodennamen, die sowohl als Tk::... und als Tk::Canvas::... existieren, aber unterschiedliche Dinge tun. Das sind gerade bind, focus, raise und lower (vielleicht gibt es noch andere?). In diesem Fall musst du genau sagen, welche Methode du genau meinst, indem du die Methoden voll ausschreibst:
Code: (dl )
$canvas->Tk::Canvas::bind(...)
bzw.
Code: (dl )
$canvas->Tk::bind(...)
.

Das Problem ist durch die Übertragung der Tcl/Tk-Kommandos in das objektorientierte Perl/Tk-System entstanden. In Tcl/Tk gibt es das globale Kommando bind, benutzbar als
Code: (dl )
bind .widgetname <event> script
und das canvas-Kommando bind, benutzbar als
Code: (dl )
.canvasname bind tag <event> script
.
PerlProfi
 2006-12-18 18:25
#46030 #46030
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Ich habe es mit Tk::bind versucht, aber in folgendem Beispiel klappt es nicht:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
use strict;
use warnings 'all';
use Tk;

my $mw = tkinit;
my $c  = $mw->Scrolled("Canvas", -background => "white")->pack;

$c->Tk::bind("<Button-1>", sub { print "\@_: @_\n" });

MainLoop;


Es funktioniert nur, wenn man anstatt von [font=courir]$c->Tk::bind[/font], dass hier: [font=courir]$c->Subwidget("canvas")->Tk::bind[/font] schreibt.

Muss man jetzt Subwidget nur bei lower(), raise(), focus() und bind() anwenden, oder gibt es noch andere Ausnahmen?

MfG PerlProfi
ptk
 2006-12-18 23:22
#46031 #46031
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ah, dein Problem war eigentlich Scrolled. Mal sehen, was im Sourcecode von Scrolled steht:
Code: (dl )
 $cw->Delegates('bind' => $w, 'bindtags' => $w, 'menu' => $w);

Ich benutze eigentlich fast immer das Subwidget, um solchen Problemen aus dem Weg zu gehen. Übrigens kann man auch $w->Subwidget("scrolled") statt $w->Subwidget("canvas") schreiben; dass ist dann immer einheitlich.
PerlProfi
 2006-12-19 14:05
#46032 #46032
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Sehr vielen dank, dann lege ich ab jetzt immer für meine Scrolleds auch noch eine Variable für das Subwidget an.

MfG PerlProfi
<< >> 5 Einträge, 1 Seite



View all threads created 2006-12-17 20:52.