Tkinterグリッドジオメトリマネージャーのサイズの伝播(スティッキーあり)

StackOverflow https://stackoverflow.com/questions/1441134

  •  10-07-2019
  •  | 
  •  

質問

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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top