tkinter ttk 分隔符不显示

29

考虑这个简单的代码:

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 separator not visible
我用红色箭头标记了它,如果你能看到它像一个小点。 我该如何让分隔符跨越整个水平宽度,或者至少可见?

如果有人看到这个问题,我更容易的解决方案是这样使用“Label”:Label(root, text=' | ').grid(row=.., column=.., sticky="w") - sagarr
3个回答

45
分隔符的自然宽度为1像素。您告诉它在五列中预留空间,但您没有请求分隔符实际填充这些五列。要解决此问题,请提供“sticky”属性,该属性表示:“如果此窗口小部件的空间超过所需,则使窗口小部件的边缘“粘”到其容器的特定侧面。”
在这种情况下,您希望分隔符粘在其容器的左右边缘上。“sticky”属性使用指南针的值,因此您需要“e”表示东,而“w”表示西:
ttk.Separator(...).grid(..., sticky="ew")

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。(有关使用`.option()'布局的详细信息和示例,请查看http://effbot.org/tkinterbook/place.htm。)

2
我认为硬编码的布局显示了缺乏抽象和不优雅的特点。此外,它们很难更改,当您更改内容大小时不会移动,也不会在用户调整窗口大小时移动。 - nyanpasu64
你的观点总体来说是正确的,但在这种情况下并不适用。移动、调整大小或任何其他更改都不会影响分隔符。另一方面,上述解决方案可以处理这种情况。 - Apostolos

4

你可能需要给分隔符一个 ipadx ,这样它才能被看到。在你的情况下,它是可见的,但因为它的宽度而无法看到。请尝试以下代码:

Separator(root, orient=HORIZONTAL).grid(row=1,column=0,columnspan=4, ipadx=100) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接