首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ttk.Separator设置长度/宽度

ttk.Separator设置长度/宽度
EN

Stack Overflow用户
提问于 2016-06-20 14:13:19
回答 1查看 5.7K关注 0票数 3

如何在Tkinter中设置/更改ttk.Separator对象的长度/宽度?

代码语言:javascript
复制
        ttk.Separator(self, orient='horizontal').grid(column=0,
        row=0, columnspan=2, sticky='ew')

似乎列跨度试图完成这项工作,但是当您有多个具有相同列跨度的分隔符时,它们似乎有不同的长度--知道为什么吗?

下面是一个简单的快速临时“脏”测试示例:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-20 15:55:18

您的问题不是分隔符太短,而是您没有告诉grid如何处理额外的未分配空间。您的列的宽度仅为所需的宽度,分隔符的宽度仅限于其所在的列。在一条评论中,你说“我希望他们一直走到入口字段的尽头”,这正是他们正在做的事情。您真正想要的是让所有的输入字段都在同一个位置结束。

快速解决方法是确保在使用grid时,始终至少给一行和一列一个非零的权重。这将告诉grid在哪里分配额外的空间。在您的示例中,您还没有这样做,因此在第三行中,条目小部件右侧有未使用的空间。

这里的快速和肮脏的解决方案是确保第0列或第1列获得额外的空间。通常的选择是将其交给输入小部件。因此,您可以添加以下内容来改善这种情况:

代码语言:javascript
复制
thirdLayer.grid_columnconfigure(1, weight=1)

这解决了眼前的问题,但您需要对每个框架以及根窗口执行相同的操作。对于每个包含由网格管理的子帧的框架,您需要至少给出一行和一列的权重。

由于您似乎试图创建一个标签和条目小部件的网格,所以您可能需要考虑使用单个框架而不是多个框架。通过使用单个框架,您不必尝试猜测要使用多少填充来使所有内容排队。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37924785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档