When you're typing into the text box, it has focus. Cancel the binding to stop adding tags when the text box gets focus, enable it back when the focus goes somewhere else.
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
use Tk::ROText;
my $mw = 'MainWindow'->new(-title => 'Tagging');
$mw->Label(-text => 'Here, the tags are being created:')->pack;
my $rotext = $mw->ROText->pack;
$mw->Label(-text => 'Try typing here, including the letter "s":')->pac
+k;
my $text = $mw->Text(-width => 20, -height => 3)->pack;
$mw->Entry(-text => 'Click here to change focus.', -state => 'readonly
+')->pack;
my $label = $mw->Label(-textvariable => \ my $l)->pack;
my $max = 1000;
my ($i, $repeat, $stop);
$repeat = $mw->repeat(10, sub {
return if $stop;
++$i;
$rotext->insert('end', $i, "T$i");
$l = "$i/$max tags added. Press 's' to stop.";
$repeat->cancel if $i == $max;
});
sub stop {
$stop = ! $stop;
$l =~ s/stop/start/;
}
$mw->bind('<s>', \&stop);
$text->bind('<FocusIn>', sub { $mw->bind('<s>', "") });
$text->bind('<FocusOut>', sub { $mw->bind('<s>', \&stop) });
MainLoop();
Update: Fixed the problem with "stop" not being updated.
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
| [reply] [d/l] [select] |
Thank you! Since there are multiple spots for user input (the one I mentioned was just an example), I created a dialog box warning them of a possibly time-consuming operation and letting them skip the step by choosing "Cancel".
| [reply] |
37885 tags? Thats for humans to click at? | [reply] |
Yeah, that's why I'm trying to do this! It's their data; my goal is to relay to the user it's a lot and maybe choose to filter their data first.
| [reply] |