将鼠标悬停在 ttk.Menubutton 上时如何打开与它关联的菜单?
How to open a menu tied to ttk.Menubutton when hovering over it?
本想在Tkinter
中做一个自定义菜单栏,但由于无法调整,只好做拐杖了。我从 Frame
、Button
和 Menubutton
制作了自定义菜单。但是我遇到了一个小问题——将鼠标悬停在 ttk.Menubutton
上时无法打开菜单。也就是说,我需要将鼠标悬停在 Menubutton 上时打开附加到此按钮的菜单(模拟单击 Menubutton
)。如何实施?
代码
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")
style = ttk.Style(root)
fr = ttk.Frame(root)
btn_menu = ttk.Menubutton(fr, text='fegvd')
btn_menu.grid(row=0, column=0)
btn =ttk.Button(fr, text='grfbvgfev')
btn.grid(row=0, column=1)
btn_menu_st = ttk.Menubutton(fr, text='Gds')
btn_menu_st.grid(row=0, column=2)
fr.pack(fill='x')
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style = tk.Menu(btn_menu_st, tearoff=0, foreground='white')
style.add_command(label='Ugu')
btn_menu.configure(menu=file)
btn_menu_st.configure(menu=style)
root.mainloop()
也许有更好的实现方法 it.My 想法是发送一个鼠标事件。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")
style = ttk.Style(root)
fr = ttk.Frame(root)
btn_menu = ttk.Menubutton(fr, text='fegvd')
btn_menu.grid(row=0, column=0)
def func1(e):
e.widget.event_generate("<Button-1>") # send a mouse press event
btn_menu.bind("<Enter>",func1) # when your mouse enter this widget
btn =ttk.Button(fr, text='grfbvgfev')
btn.grid(row=0, column=1)
btn_menu_st = ttk.Menubutton(fr, text='Gds')
btn_menu_st.grid(row=0, column=2)
fr.pack(fill='x')
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style = tk.Menu(btn_menu_st, tearoff=0, foreground='white')
style.add_command(label='Ugu')
btn_menu.configure(menu=file)
btn_menu_st.configure(menu=style)
root.mainloop()
我发现 .post
是个好方法。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")
style = ttk.Style(root)
fr = ttk.Frame(root)
btn_menu = ttk.Menubutton(fr, text='fegvd')
btn_menu.grid(row=0, column=0)
def func1(e):
file.post(e.widget.winfo_rootx(),e.widget.winfo_rooty()+e.widget.winfo_height())
btn_menu.bind("<Enter>",func1)
btn =ttk.Button(fr, text='grfbvgfev')
btn.grid(row=0, column=1)
btn_menu_st = ttk.Menubutton(fr, text='Gds')
btn_menu_st.grid(row=0, column=2)
fr.pack(fill='x')
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style = tk.Menu(btn_menu_st, tearoff=0, foreground='white')
style.add_command(label='Ugu')
btn_menu.configure(menu=file)
btn_menu_st.configure(menu=style)
root.mainloop()
但是.unpost
无法在我的电脑上运行,我发现
本想在Tkinter
中做一个自定义菜单栏,但由于无法调整,只好做拐杖了。我从 Frame
、Button
和 Menubutton
制作了自定义菜单。但是我遇到了一个小问题——将鼠标悬停在 ttk.Menubutton
上时无法打开菜单。也就是说,我需要将鼠标悬停在 Menubutton 上时打开附加到此按钮的菜单(模拟单击 Menubutton
)。如何实施?
代码
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")
style = ttk.Style(root)
fr = ttk.Frame(root)
btn_menu = ttk.Menubutton(fr, text='fegvd')
btn_menu.grid(row=0, column=0)
btn =ttk.Button(fr, text='grfbvgfev')
btn.grid(row=0, column=1)
btn_menu_st = ttk.Menubutton(fr, text='Gds')
btn_menu_st.grid(row=0, column=2)
fr.pack(fill='x')
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style = tk.Menu(btn_menu_st, tearoff=0, foreground='white')
style.add_command(label='Ugu')
btn_menu.configure(menu=file)
btn_menu_st.configure(menu=style)
root.mainloop()
也许有更好的实现方法 it.My 想法是发送一个鼠标事件。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")
style = ttk.Style(root)
fr = ttk.Frame(root)
btn_menu = ttk.Menubutton(fr, text='fegvd')
btn_menu.grid(row=0, column=0)
def func1(e):
e.widget.event_generate("<Button-1>") # send a mouse press event
btn_menu.bind("<Enter>",func1) # when your mouse enter this widget
btn =ttk.Button(fr, text='grfbvgfev')
btn.grid(row=0, column=1)
btn_menu_st = ttk.Menubutton(fr, text='Gds')
btn_menu_st.grid(row=0, column=2)
fr.pack(fill='x')
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style = tk.Menu(btn_menu_st, tearoff=0, foreground='white')
style.add_command(label='Ugu')
btn_menu.configure(menu=file)
btn_menu_st.configure(menu=style)
root.mainloop()
我发现 .post
是个好方法。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")
style = ttk.Style(root)
fr = ttk.Frame(root)
btn_menu = ttk.Menubutton(fr, text='fegvd')
btn_menu.grid(row=0, column=0)
def func1(e):
file.post(e.widget.winfo_rootx(),e.widget.winfo_rooty()+e.widget.winfo_height())
btn_menu.bind("<Enter>",func1)
btn =ttk.Button(fr, text='grfbvgfev')
btn.grid(row=0, column=1)
btn_menu_st = ttk.Menubutton(fr, text='Gds')
btn_menu_st.grid(row=0, column=2)
fr.pack(fill='x')
file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')
style = tk.Menu(btn_menu_st, tearoff=0, foreground='white')
style.add_command(label='Ugu')
btn_menu.configure(menu=file)
btn_menu_st.configure(menu=style)
root.mainloop()
但是.unpost
无法在我的电脑上运行,我发现