tkinter ttk分隔符不会显示

bha*_*arc 22 tkinter ttk

考虑这个简单的代码:

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()
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,分隔符几乎不可见.
ttk分隔符不可见
我用红色箭头标记它,如果你能看到它是一个小点类的东西.

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

Bry*_*ley 27

分隔符的自然宽度为1像素.你告诉它保留五列的空间,但是你没有要求分隔符实际填充这五列.要解决这个问题,请提供sticky属性,该属性显示"如果此窗口小部件的空间超出需要的空间,则使窗口小部件的边缘"粘贴到其容器的特定边".

在这种情况下,您希望分隔符粘贴到其容器的左右边缘.粘性属性使用指南针的值作为值,因此您希望"e"表示东方,"w"表示西方:

ttk.Separator(...).grid(..., sticky="ew")
Run Code Online (Sandbox Code Playgroud)


Apo*_*los 8

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

代替

ttk.Separator(root,orient=HORIZONTAL).grid(row=2, columnspan=5)
Run Code Online (Sandbox Code Playgroud)

ttk.Separator(root).place(x=0, y=26, relwidth=1)
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为硬编码布局缺乏抽象性并且不优雅。而且它们很难更改,当您更改内容大小时不会移动,或者当用户调整窗口大小时不会移动。 (2认同)