0

Text widgetを使用しています。

Perl/Tk GUI でポップアップ メニューを表示するために右クリックを無効にしました。しかし、任意の位置で右クリックすると、前のカーソル位置から右クリックした位置までのテキストが強調表示されます。

何が原因なのかわからないので、この強調表示されたテキストをプログラムで選択解除したいだけです。

どうすればこれを行うことができますか?

ありがとう!

編集:

右クリックのバインドを作成しました。これが呼び出されるサブルーチンです。

sub rightClickMenu {
    my ($self, $x, $y) = @_;
    $txt->tagRemove('sel', '1.0', 'end');
    $rightMenu -> post($x, $y);
    $txt->tagRemove('sel', '1.0', 'end');
}

selタグを 2 回削除しました(念のため)。$rightMenuポップアップするメニューです。右クリックすると完全に正常に表示されます。

4

1 に答える 1

1

テキスト ウィジェットでの選択は、選択した文字sel範囲のタグを設定することによって処理されます。このタグは次のように削除できます。

.t tag remove sel 1.0 end

テキスト ウィジェットのパス名を.t. 1.0これは、最初の文字 ( ) から最後の文字の次の文字位置( ) までのすべての文字についてend、タグselを削除することを指定します。

注: 通常、タグを削除するときは、テキスト内の複数の範囲に割り当てられている可能性に対処する必要があります。上記のタグ削除呼び出しは、テキスト全体からタグをクリアします。これは、(通常は) 選択範囲が 1 つしかないはずなので、選択タグには問題ありません。タグを持つ複数の範囲があり、fooそのうちの 1 つだけをクリアしたい場合は、最初にその範囲の開始インデックスと終了インデックスを見つけ、( を呼び出してtag remove) それらの間のタグのみをクリアする必要があります。

sel注 2: これはすべて、目に見える効果がタグの設定によって実際に引き起こされることを前提としています。Tk では、このタグを設定するボタン 2 の標準バインディングではありません。Perl-Tk の非標準バインディングが、タグと同じ方法で視覚的に表示される他のタグを設定している可能性がありますsel。さらに調査するには、次のコマンドが役立つ場合があります。

.t tag names $placeWhereIRightClicked

(ここでも、テキスト ウィジェットのパス名がであり、右クリックが発生した場所のインデックス.tを保持していると仮定します) は、そのインデックスでアクティブなすべてのタグを示します。placeWhereIRightClicked

(コマンド

.t tag names

テキスト全体のタグがリストされます。)

TkDocs には、コマンドが言及されているテキスト ウィジェットに関する記事がありますが、Perl-Tk でそれを行う方法は示されていません。tag remove

テキスト ウィジェットの CPAN ドキュメントによると、コマンドの構文は次のとおりです。

$text->tagRemove(tagName, index1, ?index2, index1, index2, ...?)

だから私は思う

$text->tagRemove('sel', '1.0', 'end')

またはそのような方法がそれを行う方法です(Perlがないため、テストできません)。

(注: コメントで言及されている 'Hoodiecrow' は私です。以前にそのニックネームを使用しました。)

于 2014-01-25T18:55:29.753 に答える