Thread Tk: Keybinding Probleme (3 answers)
Opened by Probo at 2011-04-09 13:14

FIFO
 2011-04-09 14:38
#147497 #147497
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2011-04-09T11:14:17 Probo
Hallo liebes Forum,
$scrl scheint beim <Enter> Event einfach nicht bei datenbank_suche anzukommen.

Warum nur klappt es beim Button?


Weil der bind-callback als erstes Argument eine Objektreferenz des aufrufenden Widgets übergibt, $scrl steht dann in $_[1] und nicht in $_[0].

Gruß FIFO

Wenn Du willst, dass beide Varianten den selben einen gleichartigen sub-Aufruf generieren, kannst musst Du beim Button auch das Button-Objekt übergeben:
Code (perl): (dl )
1
2
3
4
5
6
my $button1;
$button1 = $frame4 -> Button(
    -text => "Suchen", 
    -command =>[\&datenbank_suche, $button1, $scrl, $suchbegriff],
    -width=>'20' 
);

Edit: Das Übergeben des noch nicht initialisierten Button-Objektes ist wahrscheinlich Blödsinn. Kann das aktuell hier nicht testen. Wenn man die Objektreferenz in der sub ohnehin nicht braucht, kann man einen beliebigen Skalar nehmen.

und in der sub dann zuerst die Referenz abrufen:
Code (perl): (dl )
1
2
3
sub datenbank_suche {
    my ($called_by, $scrl, $suchbegriff) = @_;
    ...


Edit2: Falls doch das aufrufende Widget interessiert, sollte der Button so gehen:
Code (perl): (dl )
1
2
3
4
5
my $button1 = $frame4 -> Button(
    -text => "Suchen", 
    -width=>'20' 
);
$button1->configure(-command =>[\&datenbank_suche, $button1, $scrl, $suchbegriff]);

Last edited: 2011-04-09 15:21:18 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread Tk: Keybinding Probleme