Schrift
[thread]10385[/thread]

Entry -> Enter -> Event



<< >> 4 Einträge, 1 Seite
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 :) )
renee
 2007-09-13 14:18
#99414 #99414
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $mw = tkinit;
my $var = "test";

my $entry = $mw->Entry( -textvariable => \$var )->pack;
$entry->bind( '<Return>', \&aufruf );

MainLoop;

sub aufruf{
    print "Hallo ",$entry->get,"\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pktm
 2007-09-13 14:26
#99415 #99415
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
renee+2007-09-13 12:18:41--
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use warnings;
use Tk;

my $mw = tkinit;
my $var = "test";

my $entry = $mw->Entry( -textvariable => \$var )->pack;
$entry->bind( '<Return>', \&aufruf );

MainLoop;

sub aufruf{
    print "Hallo ",$entry->get,"\n";
}


Ach ja klar, Return und nicht Enter.... *KopfAufTisch*
http://www.intergastro-service.de (mein erstes CMS :) )
ptk
 2007-09-13 23:56
#99456 #99456
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
In der widget-Demonstration gibt es ein nützliches Helferlein namens "Show keyboard symbols". Übrigens gibt es zwar kein Enter, dafür aber KP_Enter für die Taste auf dem nummerischen Pad.
<< >> 4 Einträge, 1 Seite



View all threads created 2007-09-13 14:04.