我在我的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
答案 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()
我希望它能解决一些问题。