【问题标题】:ttk: how to make a frame look like a labelframe?ttk:如何使框架看起来像标签框架?
【发布时间】:2012-09-14 14:13:25
【问题描述】:

Python ttk gui 创建很容易,并且主要具有原生外观(win7)。不过,我遇到了一个小问题:

我想要一个看起来像 ttk.LabelFrame 但没有标签的框架。只是省略文本选项会留下难看的空白。

我也无法让 ttk.Frame 边框看起来像 LabelFrame。有没有一种优雅的方式来做到这一点?如果这适用于 xp 以上的所有/大多数 Windows 版本,则奖励业力。

也许它适用于样式,但样式 LabelFrame 属性似乎大多为空(style.element_options(“border.relief”))。也许我找错地方了。

编辑:

try:  # python 3
    from tkinter import *  # from ... import * is bad
    from tkinter.ttk import *
except:
    from Tkinter import *
    from ttk import *

t = Tcl().eval
print("tcl version: " + str(t("info patchlevel")))
print("TkVersion: " + str(TkVersion))

root = Tk()

lF = LabelFrame(root, text=None)
lF.grid()
b = Button(lF, text='gonzo')
b.grid()

f = Frame(root, relief="groove") #GROOVE)
f.grid()
b2 = Button(f, text='gonzo')
b2.grid()

f2 = Frame(root, relief=GROOVE, borderwidth=2)
f2.grid()
b3 = Button(f2, text='gonzo')
b3.grid()

mainloop()

使用新下载的 python 3.2.3 在 win7 上输出:

tcl 版本:8.5.9

TkV 版本:8.5

这台机器上也安装了python 2.6.6(同样的问题)。不过,每个安装似乎都使用了正确的 tk/tcl。

【问题讨论】:

  • 在我的 Windows 7 机器上,将 ttk.Frame 设置为使用 Relief='groove' 与 LabelFrame 的外观相匹配。这对你不起作用?
  • 这是我尝试的第一件事,但它对我不起作用。奇数。
  • 嗯,所以看起来使用 ttk.Frame 设置浮雕='groove' 选项对我有用,只是因为我在 Win 7 下使用的是 Windows 经典主题。只要我回到默认主题,我看到了和你一样的区别。

标签: python tkinter frame ttk


【解决方案1】:

好的,似乎获得 LabelFrame 没有间隙的一种解决方案是使用空小部件代替文本。因此,稍微修改示例的第一部分:

# don't do the 'from tkinter import *' thing to avoid namespace clashes
import tkinter   # assuming Python 3 for simplicity's sake
import tkinter.ttk as ttk 

root = tkinter.Tk()

f = tkinter.Frame(relief='flat')
lF = ttk.LabelFrame(root, labelwidget=f, borderwidth=4)
lF.grid()
b = ttk.Button(lF, text='gonzo')
b.grid()

root.mainloop()

似乎适用于常规 Win7 主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多