每当光标位置在文本小部件中更改时,都会自动调用子例程

时间:2014-03-12 14:42:41

标签: perl tkinter tcl tk perltk

我正在使用Tk::Text模块。

我希望每当用户更改Tk::Text模块内光标的位置时,它都应该作为调用我编写的子程序的触发器。

我该如何实施?

修改

正如Donal Fellows所回答的那样,在调用insert例行程序时,我需要找出markSet标记是否发生了变化。我已广泛搜索网络以找到解决此问题的方法,但无济于事。现在我需要你们帮助我。谢谢!

2 个答案:

答案 0 :(得分:2)

insert标记的位置发生变化(这是您正在查找的术语)时,没有预定义的回调,但始终通过{{1>设置 }} 方法。也许你可以放入一些内容来拦截对该方法的调用,看看它们是否被应用于markSet,并进行回调? (这肯定是我在Tcl / Tk中做到的;我不知道拦截Perl方面的方法有多容易,但肯定有可能吗?)

答案 1 :(得分:1)

这是https://stackoverflow.com/a/22356444/2335842所讨论的内容,有关详情,请参阅http://p3rl.org/perlobjhttp://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.