Python Tkinter TTK 带标签的分隔符

Posted

技术标签:

【中文标题】Python Tkinter TTK 带标签的分隔符【英文标题】:Python Tkinter TTK Separator With Label 【发布时间】:2016-11-18 17:03:18 【问题描述】:

我正在尝试创建一个在标签后面包含分隔符的自定义小部件。我希望分隔符在标签后面延伸到窗口的每一侧(使用网格)。 我尝试自己创建这个,但我无法让分隔符粘在边缘。

import tkinter as tk
from tkinter import ttk

class LabelSeparator (tk.Frame):
    def __init__ (self, parent, text = "", width = "", *args):
        tk.Frame.__init__ (self, parent, *args)

        self.separator = ttk.Separator (self, orient = tk.HORIZONTAL)
        self.separator.grid (row = 0, column = 0, sticky = "ew")

        self.label = ttk.Label (self, text = text)
        self.label.grid (row = 0, column = 0, padx = width)

if __name__ == "__main__":
    root = tk.Tk ()
    root.geometry ("200x40")

    label = LabelSeparator (root, text = "Label", width = 15)
    label.grid (sticky = "ew")

    label2 = LabelSeparator (root, text = "A Second Label", width = 15)
    label2.grid (sticky = "ew")

    root.mainloop ()

我发现扩展分隔符的唯一方法是增加标签上的 padx,但这并不能真正解决问题。

我应该提一下,我对创建自定义小部件非常陌生。

【问题讨论】:

【参考方案1】:

您的代码的唯一问题是您没有调用 grid_columnconfigure 来告诉 tkinter 如何处理额外的空间。由于您没有告诉内部框架如何处理多余的空间,因此它将其留空。当小部件放置在其父级中并展开时,您的内部小部件没有使用额外的空间。

在您的__init__ 中添加以下内容:

self.grid_columnconfigure(0, weight=1)

作为一般经验法则,您总是希望在使用网格来管理其子级的父级中设置至少一行和一列的权重。

【讨论】:

哦,非常感谢。没想到这么简单……我在开发软件的时候确实正确使用了网格管理器,这只是为了测试小部件。

以上是关于Python Tkinter TTK 带标签的分隔符的主要内容,如果未能解决你的问题,请参考以下文章

python tkinter与ttk

tkinter学习01

part11-2 Python图形界面编程(Tkinter常用组件对话框(Dialog)菜单Canvas绘图)

无法在 python tkinter 中导入 ttk

Python 2.7:通过 Ttk 的主题“通用对话框”tkinter 接口?

python 3 - tkinter - ttk treeview:查看列文本