Автоматический вызов подпрограммы при каждом изменении положения курсора в текстовом виджете
Я использую Tk::Text
модуль.
Я хочу, чтобы всякий раз, когда пользователь изменял положение курсора внутри Tk::Text
модуль, он должен действовать как триггер для вызова подпрограммы, которую я написал.
Как мне реализовать это?
РЕДАКТИРОВАТЬ:
Как ответил Донал Феллоуз, мне нужно как-то найти insert
пометка меняется, когда вызов сделан на markSet
рутина. Я искал в сети, чтобы найти решение этой проблемы, но безрезультатно. Теперь мне нужно, чтобы вы, ребята, помогли мне с этим. Спасибо!
2 ответа
Нет предопределенного обратного вызова, когда местоположение insert
пометить изменения (это терминология, которую вы ищете), но она всегда устанавливается через markSet
метод. Может быть, вы можете вставить что-то, чтобы перехватить вызовы этого метода, посмотреть, применяются ли они к insert
и сделать ваш обратный звонок? (Это, безусловно, то, как я это сделал бы в Tcl/Tk; я не знаю, насколько легко перехватывать методы на стороне Perl, но, конечно, это должно быть возможно?)
Об этом говорит /questions/3725337/avtomaticheskij-vyizov-podprogrammyi-pri-kazhdom-izmenenii-polozheniya-kursora-v-tekstovom-vidzhete/3725358#3725358, см. http://p3rl.org/perlobj и http://p3rl.org/Tk::Widget и http://p3rl.org/require детали
#!/usr/bin/perl --
use strict; use warnings;
use Tk;
Main( @ARGV );
exit( 0 );
BEGIN {
package Tk::TText;
$INC{q{Tk/TText.pm}}=__FILE__;
use parent qw[ Tk::Text ];
Tk::Widget->Construct( q{TText} );
sub markSet {
warn qq{@_};
my( $self, @args ) = @_;
$self->SUPER::markSet( @args );
}
}
sub Main {
my $mw = tkinit();
$mw->TText->pack;
use Tk::WidgetDump; $mw->WidgetDump; ## helps you Tk your Tk
$mw->MainLoop;
}
__END__
Tk::TText=HASH(0x10f7a74) insert @347,218 at - line 13.
Tk::TText=HASH(0x10f7a74) anchor insert at - line 13.