2017-10-28 4 views
0

私はまだTkinterを理解しようとしていますが、なぜこのright変数がすべての方法で右に表示されないのか分かりません。私はこれらのフレームがウィンドウを垂直に分割すると思ったのですか?Tkinter Alignment

enter image description here

from tkinter import * 

root = Tk() 
frame1 = Frame(root, bg = 'blue').grid(row = 0, column =0,sticky = W) 
Label(frame1, text = 'Left').grid(row = 0, column =0,sticky = W) 

frame2 = Frame(root, bg = 'blue').grid(row = 0, column = 1,sticky = E) 
Label(frame2, text = 'Right').grid(row = 0, column =1,sticky = E) 

root.mainloop() 
+0

達成しようとしていることを示す画像を描くことはできますか? – duhaime

+0

[Paul Cornelius 'answer](https://stackoverflow.com/a/46985899/7032856)は、フレームウィジェットのオブジェクトではなく、 'frame1'と' frame2'が 'None'に割り当てられていることを指摘しています戻り値のないメソッドの結果、 – Nae

答えて

1

追加してみてください:

Grid.rowconfigure(root, 0, weight=1) 
Grid.columnconfigure(root, 0, weight=1) 
Grid.columnconfigure(root, 1, weight=1) 

root.mainloop() 

、必要に応じてあなたには、いくつかの理由のためだけでは下記を追加することができ直前に:

Grid.columnconfigure(root, 0, weight=1) 

あなたのコードがうまく動作しないように思われる理由は、何とかルートウィンドウがそれ以上の幅を縮小するのを拒否しているからだと思います。長いテキストや大きいフォントを使用している場合は、意図したとおりに動作します。

+0

ありがとう!パーフェクト...私はこの列の構成が何を理解しようとしたが、それをクリックすることはできません。正確に何を説明する良い方法がありますか? – user6142489

+0

@ user6142489私はそれが親(親、columnNumber、重量)は、親がサイズ変更されている場合は、体重の要素でサイズを変更するグリッドを教えて、あなたの場合はルートが必要以上に長い行を持っているが、サイズ変更を気にしません。 rowconfigureも同様の方法で動作します。 – Nae

2

Naeの答えは正しいが、試してみるとうまくいかなかった。その理由は、

frame1 = Frame(root, bg = 'blue').grid(row = 0, column =0,sticky = W) 

がNone .grid()の戻り値に名前frame1を結合することです。あなたはこの行を実行する場合:

Label(frame1, text = 'Left').grid(row = 0, column =0,sticky = W) 

をあなたは、その親はなしではなく、フレームではありませんので、ラベルにトップレベルのウィンドウを作り、実際には、あります。 columnconfigureの説明については詳しく説明し

from tkinter import * 

root = Tk() 

frame1 = Frame(root, bg = 'blue') 
frame1.grid(row = 0, column =0, sticky = W) 
Label(frame1, text = 'Left').grid(row = 0, column = 0) 

frame2 = Frame(root, bg = 'green') 
frame2.grid(row = 0, column = 1,sticky = E) 
Label(frame2, text = 'Right').grid(row = 0, column = 0) 

root.columnconfigure(0, weight=1) 
root.columnconfigure(1, weight=1) 

root.mainloop() 

これは私のために(Windowsの10のpython3.6を)働いデフォルトでは、tkが「それはdoesnの場合でも、可能な最小のスペースにグリッドを絞りますウィンドウを埋める。したがって、2つのラベルは左に絞られてしまいます。 2番目のものはsticky = Eを持っていますが、レイアウトに余分なスペースがないので、スティッキーな設定の効果は見えません。これを無効にするには、1つ以上の列にゼロ以外の重みを代入します。これは、相対的な列の重みに基づいて未使用の領域を割り当てることによって、ウィンドウがいっぱいになるまでグリッドを展開するようにtkに指示します。

+0

ありがとうございます。だから私は常に最初のフレーム宣言から.grid()を分割する必要があります。本当にTkinterのような急な学習曲線が(少なくとも私にとっては)好きです。ありがとう! – user6142489

+0

_実際には、ラベルをトップレベルのウィンドウにしています。 "_ - あなたの用語はここで少し混乱しています。あなたはそれをウインドウやトップレベルにしていません。このコードは、ウィジェットをルートウィンドウの子にします。 –

関連する問題