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/perlobjとhttp://p3rl.org/Tk::Widgethttp://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.
于 2014-04-12T00:40:22.370 に答える