2012-10-25 5 views
5

ラベルを使ってウィンドウを塗りたいのですが、列が現在のウィンドウ(または親フレーム)サイズより大きくなると、ラップしておきたいと思います。TkInterでタイリングレイアウト/フローレイアウトを作成するにはどうすればよいですか?

私はgridレイアウトを試しましたが、次の要素を次の行に配置するタイミングを知るために、各行の内容のサイズを自分で計算する必要があります。

私が尋ねる理由は、何らかの種類のタイルファイルアイコンを作成したいからです。

また、別の方法で尋ねられますが、TkInterのSwingのFlowLayoutのようなものがありますか?

答えて

7

私がこのようなものをしたいときは、コンテナのテキストウィジェットを使用します。テキストウィジェットは組み込みウィジェットを持つことができ、テキストのようにラップできます。あなたのウィジェットがすべて同じ高さである限り、効果はかなり良いです。例えば

(カットや著者の要求に応じて、質問から貼り付け):

textwidget = tk.Text(master) 
textwidget.pack(side=tk.LEFT, fill=tk.BOTH) 
for f in os.listdir('/tmp'): 
    textwidget.window_create(tk.INSERT, window=tk.Label(textwidget, text=f)) 
+0

グレート!ありがとうございました。あなたの答えに提供したコード例を挿入してください。次の人は、テキストウィジェットでドキュメントを検索する必要はありません:) – devsnd

+0

ユーザは 'Text'をテキストボックスとして使用して、バックスペースなどでテキストを削除したり削除したりすることができます。これは、GUIマネージャとして使用するのには望ましくありません。 'textwidget.config(state = tk.DISABLED)'で編集を無効にすることができます。そうであっても、ユーザはテキスト/空きスペースを選択することができ、カーソルはテキストカーソルのように見える。これらの2つの事柄は、最終的に、背景選択色をテキストボックスの通常の背景色に設定し、カーソルを矢印に変更する次のコードで修正することもできます。 'textwidget.config(selectbackground = textwidget.cget( 'background')、cursor = 'arrow')' – nitro2k01

+0

@ nitro2k01:おそらくは選択を無効にするキーバインディングを単純に追加するだけです。また、ウィジェットが無効になっているときは挿入カーソルがないので、ウィジェットを変更する必要はありません。 –

関連する問題