微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Tkinter:有没有办法在点击它并进入子菜单后保持 ttk.Menubutton 的背景颜色?

如何解决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 举报,一经查实,本站将立刻删除。