30

考虑这个简单的代码:

from Tkinter import *
import ttk
root= Tk()
ttk.Label(root, text='Heading Here').grid(row=1, column=1)
ttk.Separator(root,orient=HORIZONTAL).grid(row=2, columnspan=5)
root.mainloop()

当我运行这段代码时,分隔符几乎是不可见的。
ttk 分隔符不可见
我已经用红色箭头标记了它,如果你能把它看作一个小点的话。

如何使分隔符跨越整个水平宽度,或者至少是可见的?

4

3 回答 3

43

分隔符的自然宽度为 1 个像素。您告诉它保留跨五列的空间,但您没有要求分隔符实际填充这五列。要解决此问题,请提供sticky属性,该属性表示“如果此小部件的空间超过所需空间,则使小部件的边缘“粘”到其容器的特定侧面”。

在这种情况下,您希望分隔符粘在其容器的左右边缘。粘性属性使用指南针的点作为值,因此您需要“e”代表东方,“w”代表西方:

ttk.Separator(...).grid(..., sticky="ew")
于 2013-06-09T20:37:15.700 回答
8

@Bryan 的sticky解决方案很好,但它只解决了部分情况,因为分隔符不会覆盖整个水平宽度(你问的)。这是您可以应用的替代解决方案:.grid()使用place()布局代替 ,并完全控制分隔符的位置、宽度(长度)甚至高度。要将其应用于当前案例(没有任何额外功能)并覆盖整个水平宽度,只需:

代替

ttk.Separator(root,orient=HORIZONTAL).grid(row=2, columnspan=5)

ttk.Separator(root).place(x=0, y=26, relwidth=1)

您可以根据需要设置“y”。另请注意,这orient=HORIZONTAL不是必需的,因为它是默认选项。(查看http://effbot.org/tkinterbook/place.htm以获取使用 `.option()' 布局的详细信息和示例。)

于 2018-03-08T09:26:57.907 回答
2

您可能必须给 Separator 一个ipadx以便它可见。在您的情况下,它是可见的,但由于它的宽度,您看不到它。尝试这个:

Separator(root, orient=HORIZONTAL).grid(row=1,column=0,columnspan=4, ipadx=100) 
于 2020-04-27T18:20:25.343 回答