簡體   English   中英

ttk.Separator設置長度/寬度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM