それはその属性を持っているようには見えませんが、私にとっては本当に便利でしょう。
Text
ウィジェットの 状態 をNORMAL
からDISABLED
に変更する必要がありますaftertext.insert()
またはtext.bind()
を入力:
text.config(state=DISABLED)
text = Text(app, state='disabled', width=44, height=5)
挿入の前後に状態を変更します。そうしないと更新されません。
text.configure(state='normal')
text.insert('end', 'Some Text')
text.configure(state='disabled')
tcl wiki は、この問題を詳細に説明し、3つの可能な解決策をリストしています。
(2)または(3)が望ましいでしょうが、解決策は明らかではありません。ただし、 有効なソリューションはunpythonic wikiで利用可能です :
from Tkinter import Text
from idlelib.WidgetRedirector import WidgetRedirector
class ReadOnlyText(Text):
def __init__(self, *args, **kwargs):
Text.__init__(self, *args, **kwargs)
self.redirector = WidgetRedirector(self)
self.insert = self.redirector.register("insert", lambda *args, **kw: "break")
self.delete = self.redirector.register("delete", lambda *args, **kw: "break")
非常に簡単な解決策は、次のようにキーを押すと「ブレーク」を返す関数にバインドすることです。
import Tkinter
root = Tkinter.Tk()
readonly = Tkinter.Text(root)
readonly.bind("<Key>", lambda e: "break")
50の評判がないので、 nbro's answerにコメントを追加できません。それにもかかわらず、それはこの答えが属するところです。
あなたのユースケースが本当に簡単な場合、 nbro'stext.bind( '<1>'、lambda event:text.focus_set())コードは Craig McQueen はOS Xでは見られるが、他の人はWindowsやLinuxでは見られない対話性の問題。
OTOH、読み取り専用データにコンテキスト構造がある場合、ある時点でおそらくTkinter.Text.insert(position、text、taglist)タグの下の読み取り専用のテキストボックスウィンドウに追加します。これは、コンテキストに基づいてデータの一部を目立たせるために行います。タグでマークアップされたテキストは、。Text.tag_config()を呼び出してフォントや色などを変更することで強調できます。同様に、タグでマークアップすると、。Text.tag_bind()を使用してインタラクティブバインディングをアタッチできます。 これらの関数はこちら を使用する良い例があります。 mark_for_paste()関数がNiceの場合、データのコンテキストを理解するmark_for_paste()関数の方がおそらく優れています。
from Tkinter import *
root = Tk()
text = Text(root)
text.insert(END,"Some Text")
text.configure(state='disabled')
ユーザー編集を無効にして許可する場合は、Windowsでこのコードを使用します Ctrl+C 画面テキストのコピーの場合:
def txtEvent(event):
if(event.state==12 and event.keysym=='c' ):
return
else:
return "break"
txt.bind("<Key>", lambda e: txtEvent(e))
テキストを選択する必要がない場合は、状態を無効にするのが最も簡単な方法です。コピーをサポートするために、外部エンティティ-Button
-を使用してジョブを実行できます。ユーザーがボタンを押すたびに、Text
の内容がクリップボードにコピーされます。 Tk
は、クリップボードの処理をビルド内でサポートしているため( here を参照)、Ctrl-C
の動作をエミュレートするのは簡単です。ログメッセージを作成するコンソールを作成する場合は、さらに進んでEntry
を追加して、ユーザーがコピーするログメッセージの数を指定できるようにします。