4

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

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

我该如何实施呢?

编辑:

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

4

2 回答 2

2

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

于 2014-03-12T15:36:13.343 回答
1

这就是https://stackoverflow.com/a/22356444/2335842所说的,参见http://p3rl.org/perlobjhttp://p3rl.org/Tk::Widgethttp://p3rl。组织/要求了解详情

#!/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.
于 2014-04-12T00:40:22.370 回答