ttk.OptionMenu没有轮廓/边框

时间:2017-10-17 16:33:36

标签: python tkinter

我在我的GUI中使用ttk.Optionmenu()但我很生气,当没有鼠标悬停条件时,菜单/按钮没有任何显示其边框的视觉效果。它没有给我任何element_options,看看我是否可以改变这个小部件的特定样式。

如果有一种让按钮看起来像一个按钮的方式,而不仅仅是当它变得焦点时我会喜欢它...否则它看起来有点怪。

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

var = tk.StringVar(root)
opmenu = ttk.OptionMenu(root, var, 'One', 'Two', 'Three')
opmenu.pack()

root.mainloop()

我知道如何更改小部件的style,但没有解决它的静止外观。我试过'谷歌搜索'希望找到一个解决方案但无济于事。 使用Python 3.5.2和tkinter 8.6

2 个答案:

答案 0 :(得分:1)

更新

经过一番挖掘,看起来你可以强迫这种风格远离窗户。它看起来不太好但我认为你可以设置你的风格,以便在你使用theme_use('clam')之后看起来像你想要的那样

看一下这个例子:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

var1 = tk.StringVar()
var1.set("One")

s = ttk.Style(root)
s.theme_use('clam')
s.configure('raised.TMenubutton', borderwidth=1)

opmenu = ttk.OptionMenu(root, var1, "One", "One", "Two", "Three",
                        style = 'raised.TMenubutton')

opmenu.pack()

root.mainloop()

在回复您对使用带弹出菜单的按钮的评论时,您可以执行以下操作:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

popup = tk.Menu(root, tearoff=0)
popup.add_command(label="One", command= lambda: update_btn("One"))
popup.add_command(label="Two", command= lambda: update_btn("Two"))
popup.add_command(label="Three", command= lambda: update_btn("Three"))

btn = ttk.Button(root, text="One")
btn.pack()

def update_btn(x):
    btn.config(text=x)

def btn_popup(event):
    try:
        popup.tk_popup(event.x_root, event.y_root, 0)
    finally:
        popup.grab_release()

btn.bind("<Button-1>", btn_popup)

root.mainloop()

答案 1 :(得分:0)

我找到了永久显示vista风格边框的解决方案:

import tkinter as tk
from tkinter import ttk

# Always show the active style
def alwaysActiveStyle(widget):
    widget.config(state="active")
    widget.bind("<Leave>", lambda e: "break")

root = tk.Tk()

var = tk.StringVar(root)
opmenu = ttk.OptionMenu(root, var, 'One', 'Two', 'Three')
alwaysActiveStyle(opmenu)
opmenu.pack()

root.mainloop()

我希望它能解决一些问题。