4

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

Tk バージョン: 8.5

出力

このマシンにも python 2.6.6 がインストールされています (同じ問題)。ただし、各インストールは正しい tk/tcl を使用しているようです。

4

1 に答える 1

5

OK、ギャップなしで LabelFrame を取得する 1 つの解決策は、テキストの代わりに空のウィジェットを使用することです。したがって、例の最初の部分を少し変更します。

# 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テーマでうまくいくようです。

于 2012-09-18T18:01:18.473 に答える