Thread Entry -> Enter -> Event (3 answers)
Opened by pktm at 2007-09-13 14:04

pktm
 2007-09-13 14:04
#99408 #99408
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Wie setze ich das um, dass ich das Drücken der Enter-Taste an die Ausfürhung einer Methode binde?
Ich kapier das einfach nicht.

Folgender Code soll mir ein Frame mit einem Entry und einem Button liefern.

Code (perl): (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
package Teil;

use strict;
use warnings;
use Tk;
use Tk::PNG;


=head1 METHODEN

=head2 suchfeld( $top, $breite_des_entrys, $methode_fuer_button, $diverse_optionen_href )

Erzeugt ein Frame mit den Kindelementen Entry und Button (mit Lupe als Bild),
sowie einer Bindung des Entries auf die Enter-Taste um das Kommando des
Buttons auszuführen.

=cut

sub suchfeld {
    my $self    = shift;
    my $top     = shift;
    my $entry_w = shift;
    my $btn_cmd = shift;
    my $opts    = shift;
    
    my %sf = (); # sf = suchfeld
    
    $sf{frame} = $top->Frame();
    if( exists $opts->{pack} and $opts->{pack} == 1 ) {
        $sf{frame}->pack();
    }
    $sf{entry} = $sf{frame}->Entry(-width => $entry_w)->pack(-side => 'left',);
    $sf{photo} = $top->Photo(-file => 'C:/Perl/Scripten/CELEX/CELEX/Divers/GUI/Images/Gnome-mix/16x16/actions/mail_find.png');
    $sf{button} = $sf{frame}->Button(-image => $sf{photo}, -command => $btn_cmd)->pack(-side => 'left',);
    
    $sf{entry}->bind('<KeyPress>', $btn_cmd);
    
    return \%sf;
} # /suchfeld

1; # /Teil, Name von der Redaktion geändert ^^


Dabei soll aber auch die Methode des Buttons ausgefürt werden, wenn im Entry Enter gerückt wird.

Also dachte ich mir, schreibe ich halt $sf{entry}->bind('<Enter>', $btn_cmd);. Nur funktioniert das nicht, in dem Sinne als dass die Methode nicht aufgerufen wird wenn ich Enter drücke. Dafür wird sie aufgerufen, wenn ich das Fenster verschiebe. Außerdem kann es so passieren, dass wenn die Methode des Buttons über configure() geändert wird, das Drücken der Enter-Taste eine falsche Methode aufruft, aber das ist mir im Moment nicht so wichtig, wie es überhaupt mal umzusetzen, dass der Aufruf dann erfolgt, wenn ich es will :)

Hier ist ein Testaufruf für die Sache:
Code: (dl )
1
2
3
4
5
6
7
use Teil;

my $mw = tkinit();

my $sf_href = Teil->suchfeld($mw, 20, sub{ print "hello\n"; }, {pack => 1});

$mw->MainLoop();


Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Entry -> Enter -> Event