我正在使用Tk::Text
模块。
我希望每当用户更改Tk::Text
模块内光标的位置时,它都应该作为调用我编写的子程序的触发器。
我该如何实施?
修改
正如Donal Fellows所回答的那样,在调用insert
例行程序时,我需要找出markSet
标记是否发生了变化。我已广泛搜索网络以找到解决此问题的方法,但无济于事。现在我需要你们帮助我。谢谢!
答案 0 :(得分:2)
当insert
标记的位置发生变化(这是您正在查找的术语)时,没有预定义的回调,但始终通过{{1>设置 }} 方法。也许你可以放入一些内容来拦截对该方法的调用,看看它们是否被应用于markSet
,并进行回调? (这肯定是我在Tcl / Tk中做到的;我不知道拦截Perl方面的方法有多容易,但肯定有可能吗?)
答案 1 :(得分:1)
这是https://stackoverflow.com/a/22356444/2335842所讨论的内容,有关详情,请参阅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.