[英]ttk.Separator set the length/width
如何在Tkinter中設置/更改ttk.Separator對象的長度/寬度?
ttk.Separator(self, orient='horizontal').grid(column=0,
row=0, columnspan=2, sticky='ew')
看起來柱子試圖完成這項工作,但是當你有多個具有相同列寬的分隔符時,它們似乎有不同的長度 - 任何想法為什么?
這是一個簡單快速的特殊“臟”測試示例:
import ttk
from Tkinter import *
class myTestFrame(Frame):
def __init__(self):
Frame.__init__(self)
self.master.title("My Test Frame")
self.master.minsize(350, 150)
self.grid(sticky=W+N+S+E)
firstLayer = Frame(self)
firstLayer.pack(side="top", fill="x")
secondLayer = Frame(self)
secondLayer.pack(side="top", fill="x")
thirdLayer = Frame(self)
thirdLayer.pack(side="top", fill="x")
labelText=StringVar()
labelText.set("Enter your area zip code: ")
labelDir=Label(firstLayer, textvariable=labelText, fg="black", font = "Calibri 10 bold")
labelDir.grid(row=2, column=0, sticky="W")
zipCode=IntVar(None)
entryFieldFrame=Entry(firstLayer,textvariable=zipCode,width=5)
entryFieldFrame.grid(row=2, column=1, sticky="W", padx=31)
ttk.Separator(secondLayer, orient='horizontal').grid(column=0,
row=0, columnspan=2, sticky='ew')
labelText=StringVar()
labelText.set("Enter your age: ")
labelDir=Label(secondLayer, textvariable=labelText, fg="black", font = "Calibri 10 bold")
labelDir.grid(row=2, column=0, sticky="W")
age=IntVar(None)
age.set(1.0)
entryFieldFrame=Entry(secondLayer,textvariable=age,width=5)
entryFieldFrame.grid(row=2, column=1, sticky="W", padx=83)
ttk.Separator(thirdLayer, orient='horizontal').grid(column=0,
row=0, columnspan=2, sticky='ew')
labelText=StringVar()
labelText.set("Enter your brother's age: ")
labelDir=Label(thirdLayer, textvariable=labelText, fg="black", font = "Calibri 10 bold")
labelDir.grid(row=2, column=0, sticky="W")
brothersAge=IntVar(None)
entryFieldFrame=Entry(thirdLayer,textvariable=brothersAge,width=5)
entryFieldFrame.grid(row=2, column=1, sticky="W", padx=29)
if __name__ == "__main__":
testFrame = myTestFrame()
testFrame.mainloop()
你的問題不是分隔符太短,而是你沒有告訴grid
如何處理額外的未分配空間。 您的列只有它們所需的寬度,並且您的分隔符只有它所在列的寬度。在評論中,您說“我希望它們一直到輸入字段的末尾”,這正是他們在。 您真正想要的是所有輸入字段在同一位置結束。
快速解決方法是確保在使用grid
,始終為至少一行和一列提供非零權重。 這告訴grid
在哪里分配任何額外的空間。 在您的情況下,您還沒有這樣做,因此在第三行中,有一些空間在條目小部件的右側未使用。
這里快速而骯臟的解決方案是確保列0或1獲得額外空間。 通常選擇是將其提供給輸入小部件。 所以,你可以添加它來改善這種情況:
thirdLayer.grid_columnconfigure(1, weight=1)
這解決了當前的問題,但您需要為每個幀以及根窗口執行相同的操作。 對於包含由網格管理的子項的每個幀,您需要為至少一行和一列賦予權重。
由於您似乎正在嘗試創建標簽和條目小部件網格,因此您可能需要考慮使用單個框架而不是多個框架。 通過使用單個幀,您不必嘗試猜測要使用多少填充來排列所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.