Автоматический вызов подпрограммы при каждом изменении положения курсора в текстовом виджете

Я использую 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.
Другие вопросы по тегам