Thread Validate für text Widget ?
(3 answers)
Opened by Kalle at 2010-03-19 09:47
Guten Morgen,
Ich möchte dem Text Widget ein paar einfache Kommandos beibringen wie CTRL-S für speichern oder CTRL-F für find und solche Sachen. Anscheinend gibt es aber kein validatecommand für das Text Widget. Jetzt kann ich ja selbst ein paar binds hinzufügen, entweder direkt per bind an die bestimmte Taste oder per KeyPress/KeyRelease für alle Tasten. Problem dabei ist, daß einige Controlzeichen output erzeugen, der im Text Widget erscheint. Den würde ich gerne unterdrücken, aber ich krieg nicht raus wie das geht. Ich weiss wie ich das zuletzt eingegebe Zeichen wieder löschen kann, aber mir ist nicht so wohl bei der Sache. Lieber würde ich die Eingabe unterdrücken. Weiss jemand wie man Eingaben im Text gezielt unterdrücken kann ? 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 #!/usr/local/bin/perl use strict; use warnings; use Tk; use Tk::TextUndo; my $mw=MainWindow->new(-title=>'CTRL-S Test'); my $text = $mw->Scrolled('TextUndo', -scrollbars=>'osoe', -width=>40, -height=>15)->pack; my $closebutton = $mw->Button(-text=>'Close', -command=>sub {$mw->destroy;})->pack(-fill=>'x'); $text->bind('<Control-KeyPress-r>',sub{$text->delete('insert - 1 chars'); print "CTRL-R gedrückt\n";}); $text->bind('<KeyPress>', [\&text_validate,Ev('A')]); MainLoop(); sub text_validate { my ($text,$A) = @_; if ($A eq chr(19)) { # CTRL-S gedrückt #$text->break; print "Gotcha\n"; $text->break; } else { print "weiter\n"; } } Dieses $text->break fand ich nach einiger Suche im Web, aber es will nicht so wie ich will. Und aktiviert man das break vor dem print, wird noch nichtmal geprinted...seltsame Sache das. Weiss jemand wie das geht ? Gruß Kalle |