Tcl Tkでラベルを作成していますが、テキストを選択できません(コピーと貼り付け用)。どうすれば選択可能にできますか?
私は以下を使用してラベルを作成します:
set n 0
foreach t $list_of_labels {
incrr n
set lbl2 [label .prop_menu.main_frame.val_$n -text $t]
grid $lbl2 ...
}
他のウィジェットから多くのバインディングコードを取得してラベルに適用しないと、それはできません。これが必要な場合は、エントリウィジェットを取得して、ラベルのように見せた方がよいでしょう。何かのようなもの:
entry .e1 -textvar t -relief flat -background [$parentWindow cget -background]
フォーカスをこれらに移動したくない場合は、を追加し-takefocus 0
ます。
ラベル内のテキストをまとめて選択できるようにするには、プログラムが(他のものではなく)いつ選択するかを認識できるようにバインディングを適用する必要があり、コードを選択範囲に配置するためのコードが必要です(またはむしろクリップボード)。clipboard
後者は、実際には次のコマンドを使用して実行するのは非常に簡単です。
clipboard clear
clipboard append $text
厄介なビットは、バインディングを設定し、選択が行われたことを示しています。最も簡単なのは、次のような不完全なことを行うことです(マウスクリックにバインドします)。
bind .lbl <1> {
clipboard clear
clipboard append [%W cget -text]
bell
}
OK、それは間違いなく不完全です。あなたはもっとうまくやれる!取得できないのは、Windows独自の組み込みラベルがサポートすることが多いハイライトのスタイルです(選択範囲をドラッグしてCtrl+を押すだけCです)。これには、ハイライトを描画する機能が必要ですが、Tkのラベルウィジェットにはありません。持ってる。(エントリで何かをハックすることはできますが、複数行のテキストを実行することはできません。または、テキストウィジェットを使用することはできますが、バインディングを使用して、希望どおりに動作させるために多くの作業を行う必要があります。)
読み取り専用エントリを使用して解決し、ラベルの作成を次のように置き換えました。
set lbl2 [entry .prop_menu.main_frame.val_$n -relief flat]
$lbl2 insert 0 $t
$lbl2 configure -state readonly
そして、ラベルのように機能するが選択可能なエントリを作成することができました。