我正在使用该Tk::Text
模块。
我希望每当用户更改Tk::Text
模块内光标的位置时,它都应该充当触发器来调用我编写的子例程。
我该如何实施呢?
编辑:
正如 Donal Fellows 所回答的那样,我需要以某种方式查找在insert
调用markSet
例程时标记是否发生了变化。我已经在网上广泛搜索以找到解决此问题的方法,但无济于事。现在我需要你们帮助我。谢谢!
当标记的位置发生变化(这是您要查找的术语)时,没有预定义的回调,insert
但它始终是通过markSet
方法设置的。也许你可以放一些东西来拦截对该方法的调用,看看它们是否被应用到insert
,然后做你的回调?(这当然是我在 Tcl/Tk 中的做法;我不知道在 Perl 方面拦截方法有多么容易,但肯定有可能吗?)
这就是https://stackoverflow.com/a/22356444/2335842所说的,参见http://p3rl.org/perlobj和http://p3rl.org/Tk::Widget和 http://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.