8

サイズが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 よりも狭くなります。ただし、フレーム 1 とフレーム 2 は、境界からわかるように同じ幅です。粘着性により、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)

私は何が欠けていますか?実生活では、ネストされたフレームが積み重なっていて、思い通りに拡張されていません。

ありがとう、ダン

4

2 に答える 2

9

行と列には、マスターの余分なスペースを埋めるためにどのように拡大または縮小するかを表す「重み」があります。デフォルトでは、行または列の重みはゼロです。これは、ラベルに列を埋めるように指示したが、マスター フレームを埋めるように列に指示していないことを意味します。

これを修正するには、列に重みを付けます。この特定のケースでは、任意の正の整数で十分です。

frame1.columnconfigure(0, weight=1)
frame2.columnconfigure(0, weight=1)

の詳細についてはgrid、ruby、tcl、perl、および python の例を使用して、tkdocs.com のグリッド ページを参照してください。

于 2009-09-17T21:02:32.747 に答える
0

列とフレームを使用したこのソリューションは機能しますが、ラベルをグリッド内で同じ幅にするために、囲んでいるフレームは必要ありません。以下の例を参照してください

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()
于 2018-06-26T12:06:47.243 に答える