親の幅と同期してサイズを変更するワードラップを使用して複数行のラベルを作成することは可能ですか?つまり、メモ帳ウィンドウの幅を変更したときのメモ帳のワードラップ動作。
ユースケースは、テキストをクリップしたりスクロールバーに頼ったりせずに、複数行のテキスト(指示)のブロック全体を表示する必要があるダイアログです。親コンテナには、狭い幅に対応するのに十分な垂直方向のスペースがあります。
私はTkinterラベルとメッセージウィジェットとttkラベルウィジェットを試してきましたが成功しませんでした。ピクセルの折り返しの長さの値をハードコーディングする必要があるようですが、テキストがコンテナの右端に到達したときにこれらのコントロールに自動ワードラップを設定する必要があります。確かに、Tkintersジオメトリマネージャーは、ラベルのサイズを自動変更し、それに応じてラップレングス値を更新するのに役立ちますか?
代わりにテキストウィジェットを見るべきですか?もしそうなら、テキストウィジェットの境界線を非表示にして、ワードラップ付きの複数行のラベルとして使用できるようにすることはできますか?
これは、私が上で説明したことをどのように行うかのプロトタイプです。テキストウィジェットとStackoverflowに関する次の投稿を使用するというBryanOakleyのヒントに触発されました。Python のtkinterで、マウスでテキストを選択できるようにラベルを作成するにはどうすればよいですか?
from Tkinter import *
master = Tk()
text = """
If tkinter is 8.5 or above you'll want the selection background to appear like it does when the widget is activated. Comment this out for older versions of Tkinter.
This is even more text.
The final line of our auto-wrapping label that supports clipboard copy.
""".strip()
frameLabel = Frame( master, padx=20, pady=20 )
frameLabel.pack()
w = Text( frameLabel, wrap='word', font='Arial 12 italic' )
w.insert( 1.0, text )
w.pack()
# - have selection background appear like it does when the widget is activated (Tkinter 8.5+)
# - have label background color match its parent background color via .cget('bg')
# - set relief='flat' to hide Text control borders
# - set state='disabled' to block changes to text (while still allowing selection/clipboard copy)
w.configure( bg=master.cget('bg'), relief='flat', state='disabled' )
mainloop()