ttk:如何使框架看起来像一个labelframe?

时间:2012-09-14 14:13:25

标签: python tkinter frame ttk

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

TkVersion:8.5

output

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

1 个答案:

答案 0 :(得分:5)

好的,看起来像获得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主题为我工作。