为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2023-07-11 15:37:32
我的代码有一个小问题。我的界面上需要一个弹出菜单,不是在按下鼠标右键时弹出,而是在单击按钮(tkinter 小部件)时弹出。一个例子是这样的:http://effbot.org/zone/tkinter-popup-menu.htm但是,我想在与按钮相同的坐标处创建弹出菜单,而不是事件坐标。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 = 10y = 15bt = Button(root, text='Menu', command= lambda: popupm(x , y))bt.place(x = 10, y = 15)root.mainloop()问候!
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

按钮有几个方法可以满足您的需求: .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。如果您遇到任何问题或需要帮助调整它,请告诉我们。


查看完整回答
反对 回复 2023-07-11
?
慕斯王

TA贡献1864条经验 获得超2个赞

请将此示例转换为适合网格而不是打包或放置



查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信