Tkinterグリッドジオメトリマネージャーのサイズの伝播(スティッキーあり)
質問
Tkでサイズがどのように伝播するかについて何かが欠けています。これを試してください:
from Tkinter import *
root = Tk()
frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)
frame2 = Frame(root, border=4, relief=RIDGE)
frame2.grid(sticky=E+W)
label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame2, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)
root.mainloop()
label1はframe1内にあり、label2はframe2内にあります。 白い背景で見られるように、label1はlabel2よりも狭くなります。ただし、frame1とframe2は、境界線で見られるように同じ幅です。粘着性はlabel1を親と同じ幅になるように拡張すると思いました。
label1とlabel2を同じフレーム内に配置すると、label1はlabel2と同じ幅になります:
frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)
label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame1, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)
不足しているものは何ですか?実際には、いくつかのネストされたネストされたフレームがありますが、希望どおりに拡張されません。
ありがとう、 ダン
解決
行と列には" weight"があります。マスターの余分なスペースを埋めるためにどのように拡大または縮小するかを説明します。デフォルトでは、行または列の重みはゼロです。これは、ラベルに列を埋めるように指示したが、マスターフレームに列を埋めるように指示していないことを意味します。
これを修正するには、列に重みを付けます。この特定のケースでは、任意の正の整数が実行されます。
frame1.columnconfigure(0, weight=1)
frame2.columnconfigure(0, weight=1)
grid
の詳細、およびruby、tcl、perl、pythonの例については、 tkdocs.comのグリッドページ
他のヒント
列とフレームを使用したこのソリューションは機能しますが、グリッド内のラベルの幅を同じにするために、フレームを囲む必要はありません。以下の例を参照
from tkinter import *
root = Tk()
label1 = Label(root, text='short', bg='light green', relief=RIDGE)
label1.grid(sticky=E+W)
label2 = Label(root, text='quite a bit longer', bg='light green', relief=RIDGE)
label2.grid(sticky=E+W)
root.mainloop()
所属していません StackOverflow