在Tkinter中单击按钮时弹出菜单

2024-05-13 00:59:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码有一个小问题。 我需要一个弹出菜单在我的界面上,弹出,不是当鼠标右键按下,而是当一个按钮(tkinter小部件)被点击

例如:http://effbot.org/zone/tkinter-popup-menu.htm

但是,我希望在与按钮相同的坐标处创建popupmenu,而不是事件坐标

self.popup_menu.tk_popup(x_button, y_button, 0)

问题是,当我移动我的界面窗口或滚动屏幕栏(我的界面中有一个)并再次单击按钮时,弹出菜单不是在按钮所在的确切位置创建的。似乎.tk_popup只获取窗口坐标,而不是画布坐标

有人知道解决办法吗

编辑: 以下是一个例子:

from Tkinter import *

root = Tk()

popup = Menu(root, tearoff=0)
popup.add_command(label="Main Product")
popup.add_command(label="Side Product")

def popupm(x, y):
     try:
           popup.tk_popup(x, y, 0)
     finally:
           popup.grab_release()

x = 10
y = 15
bt = Button(root, text='Menu', command= lambda: popupm(x , y))
bt.place(x = 10, y = 15)

root.mainloop()

你好


Tags: add界面tkinter菜单buttonrootproduct按钮
1条回答
网友
1楼 · 发布于 2024-05-13 00:59:34

按钮有两个方法可以为您提供所需的内容:.winfo_rootx()和.winfo_rooty() 以下是一个工作示例:

from Tkinter import *

root = Tk()

popup = Menu(root, tearoff=0)
popup.add_command(label="Main Product")
popup.add_command(label="Side Product")

def popupm(bt):
     try:         
        x = bt.winfo_rootx()
        y = bt.winfo_rooty()
        popup.tk_popup(x, y, 0)
     finally:
           popup.grab_release()

bt = Button(root, text='Menu')
bt.configure(command = lambda: popupm(bt))
bt.place(x = 10, y = 15)

root.mainloop()

我在python3中测试了它,如果它不能转换为2,那么很抱歉。 如果您有任何问题或需要帮助调整,请告诉我们

相关问题 更多 >