带标签的Python Tkinter TTK分隔符

时间:2016-07-15 13:06:12

标签: python tkinter label separator

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

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 ()

Separator With Label

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

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

1 个答案:

答案 0 :(得分:2)

您的代码唯一的问题是您没有调用grid_columnconfigure告诉tkinter如何处理额外的空间。由于你没有告诉内部框架如何处理额外的空间,所以它留空了。当小部件放在其父级并展开时,您的内部小部件不会使用额外的空间。

__init__中添加以下内容:

self.grid_columnconfigure(0, weight=1)

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