Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5108[/thread]

Probleme mit bind events: bind klappt nicht

Leser: 2


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Hellmaker
 2005-10-18 15:14
#44783 #44783
User since
2005-08-05
16 Artikel
BenutzerIn
[default_avatar]
Hi,

habe beispielsweise folgende Shortcuts für meine Buttons festgelegt:
Code: (dl )
1
2
3
4
5
6
7
  $mw->bind( "Tk::Text", '<Alt-o>' => sub{ _openHandle( $HRI ); } );
 $mw->bind( "Tk::Text", '<Alt-c>' => sub{ closeHandle( $HRI ); } );
 $mw->bind( "Tk::Text", '<Alt-r>' => sub{
                                 if( $HRI->{'Data'}{'COM'}{'echo'} ) {
                                   $HRI->{'Data'}{'COM'}{'echo'} = 0;
                                 }
                                 else{ $HRI->{'Data'}{'COM'}{'echo'} = 1; } });

Jedoch funktionieren diese Shortcuts nicht. Sehe jetzt keine Fehler... Einer von Euch vielleicht?!
Kann es vielleicht am TextEntry- Widget (Tk::Text) liegen?!

Gruß
Hellmaker
smallish
 2005-10-18 15:36
#44784 #44784
User since
2005-10-13
28 Artikel
BenutzerIn
[default_avatar]
[quote=Hellmaker,18.10.2005, 13:14]
Code: (dl )
1
2
  $mw->bind( "Tk::Text", '<Alt-o>' 
...
[/quote]
Müsst so sein:
Code: (dl )
1
2
  $mw->bind( "Tk::Text", '<Alt-Key-o>' 
...


EDIT: Key gross geschrieben und ein [code] entfernt\n\n

<!--EDIT|smallish|1129635797-->
Hellmaker
 2005-10-18 15:47
#44785 #44785
User since
2005-08-05
16 Artikel
BenutzerIn
[default_avatar]
Schon ausprobiert... Klappt leider auch nicht! (Auch nicht, wenn Key großgeschrieben ;) )

Bei nem Kameraden am Nachbar-PC sehen die bind event vom Syntax her genau so aus und funktionieren...

Am TextEntry liegts übrigens nicht  :blush:
smallish
 2005-10-18 15:55
#44786 #44786
User since
2005-10-13
28 Artikel
BenutzerIn
[default_avatar]
Versuch mal ob das funktioniert:
Code: (dl )
1
2
3
4
5
6
7
8
9
use strict;
use warnings;
use Tk;

my $mw = MainWindow -> new();
my $text = $mw -> Text() -> pack();
$mw -> bind("Tk::Text", "<Alt-Key-o>" => sub { print "funktioniert" } );

MainLoop;


Du musst dich dabei natürlich im Text-Widget befinden sonst funktionierts nicht!
Strat
 2005-10-18 16:31
#44787 #44787
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
willst du das wirklich ans Mainwindow binden? oder doch ans Textfeld?
und von woher kommt der "tag" Tk::Text? wenn ich mich recht erinnere, koennen "tags" z.B. innerhalb von Canvas oder auch innerhalb von Tk::Text vorkommen. und das bind mit drei parametern will als ersten parameter einen tag. (wie soll das eigentlich funktionieren, wenn du mehrere Text-Widgets hast? wuerde da an alle gebunden?)

teste mal:
Code: (dl )
$text->bind('<Alt-Key-o>' => sub { print "funktioniert o\n" });
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
smallish
 2005-10-18 16:58
#44788 #44788
User since
2005-10-13
28 Artikel
BenutzerIn
[default_avatar]
Er bindet es nicht ans MainWindow sondern an jedes Tk::Text.
Quote
Tk::bind
...
DESCRIPTION
The bind method associates callbacks with X events. If 'callback' is
specified, bind will arrange for 'callback' to be evaluated whenever the
event(s) given by 'sequence' occur in the window(s) identified by
'$widget' or 'tag'.
...

Ich hab gedacht das sei beabsichtigt.
EDIT: Auszug aus Tk::bind hinzugefügt und ! durch . ersetzt\n\n

<!--EDIT|smallish|1129641261-->
Hellmaker
 2005-10-18 17:13
#44789 #44789
User since
2005-08-05
16 Artikel
BenutzerIn
[default_avatar]
[quote=Strat,18.10.2005, 14:31]willst du das wirklich ans Mainwindow binden? oder doch ans Textfeld?
und von woher kommt der "tag" Tk::Text?[/quote]
Möchte schon ans MainWindow binden. Die Tastenkombinationen sollen bestimmte Aktionen, wie zum Beispiel 'Speichern-Dialog öffnen' ausführen, also einen Mausklick auf nen bestimmten Button ersetzten.
Code: (dl )
... => sub { $button->invoke() }

funktioniert leider auch nicht...

Der Tag "Tk::Text" verhindert, dass, sollte ich mich im Textfeld befinden, nicht das Steuerzeichen im Textfeld erscheint, sondern die entsprechende subroutine ausgeführt wird.

Leider musste ich grad feststellen, dass die Kombinationen tatsächlich funktionieren, wenn ich mich im Textfeld befinde... :( Wie kann ich sie ans MainWindow binden und verhindern, dass ggf die Steurkommandos im Textfeld erscheinen...?\n\n

<!--EDIT|Hellmaker|1129641442-->
renee
 2005-10-18 17:18
#44790 #44790
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
$mw->bind('<Alt-Key-o>',\&funktion);
sollte funktionieren...
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/
smallish
 2005-10-18 17:21
#44791 #44791
User since
2005-10-13
28 Artikel
BenutzerIn
[default_avatar]
Mit 'Tk::Text' funktioniert dein bind nur in allen Tk::Text, jedoch nicht ausserhalb.
Wenn du ans MainWindow binden willst musst du mit
Code: (dl )
$mw -> bind("<Alt-Key-o>" => sub { #mach was });

arbeiten

EDIT: Renee war schneller :)\n\n

<!--EDIT|smallish|1129641762-->
renee
 2005-10-18 17:22
#44792 #44792
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das funktioniert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

use strict;

use warnings;
use Tk;

my $mw = MainWindow -> new();
my $text = $mw -> Text() -> pack();
$mw -> bind( "<Alt-Key-o>" => sub { print "funktioniert\n" } );

MainLoop;


getestet auf
WinXP
Perl 5.8.6
Tk 804.027
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/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-10-18 15:14.