如何解决Python Tkinter:有没有办法在点击它并进入子菜单后保持 ttk.Menubutton 的背景颜色?
这似乎是一个微不足道的问题,但是在弄乱了 ttk.Style() 类之后,为了为 ttk.menubutton 创建我的自定义样式,我注意到进入后我无法保留按钮本身的背景颜色子菜单...这与 tkinter 本身的 Menu 类形成对比,其中按钮在进入子菜单后确实保持背景色。我想知道 ttk.menubutton 单独使用 ttk.Style() 类是否可行?
我已经构建了一些虚拟代码,以便于查看和操作:
from tkinter import Tk,ttk,Frame,Menu
class gui(Tk):
def __init__(self):
super().__init__()
self.geometry("400x400")
a_frame = Frame(self,bg="white")
a_frame.pack(fill="x")
languages = ToolButton(a_frame,text='Programming languages')
options = Menu(languages,tearoff=0)
languages.config(menu=options)
options.add_command(label='Python')
options.add_command(label='Java')
options.add_command(label='PHP')
languages.pack(side="left")
class ToolButton(ttk.Menubutton):
def __init__(self,master=None,**kwargs):
self._custom_style()
kwargs["style"] = "Toolbutton"
ttk.Menubutton.__init__(self,master,**kwargs)
self.bind("<Button-1>",self._on_focus)
self.bind("<FocusOut>",self._on_release)
self.bind("<Return>",lambda event: event.widget.invoke())
def _on_focus(self,event):
return
def _on_release(self,event):
self.style.configure("Toolbutton",foreground='black')
def _custom_style(self):
self.style = ttk.Style()
self.style.configure("Toolbutton",background="white",padding=[7,2,7,2])
self.style.map("Toolbutton",foreground=[('pressed','white'),('active','black')],background=[('pressed',self.rgb_to_hex([125,125,125])),self.rgb_to_hex([200,200,200]))]
)
self.style.layout("Toolbutton",[("Toolbutton.bg",None),("Toolbutton.button",{"children":
[("Toolbutton.padding",{"side":"top","sticky":"nswe","children":
[("Toolbutton.label",{"side":"left","expand":"True"})]
}
)]
}
),("Toolbutton.dropdown",{"side":"right","sticky":"ns"})
]
)
@staticmethod
def rgb_to_hex(rgb):
tk_hex = "#{:x}{:x}{:x}".format(*rgb)
return tk_hex
if __name__ == "__main__":
gui = gui()
gui.mainloop()
我先谢谢你!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。