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 (将#修改为@)