python - 在 Tkinter 中单击按钮上的弹出菜单
问题描述
我的代码有一个小问题。我需要在我的界面上弹出一个弹出菜单,它不是在按下鼠标右键时弹出,而是在单击按钮(tkinter 小部件)时弹出。
一个例子是这样的:http ://effbot.org/zone/tkinter-popup-menu.htm
但是,我想在与按钮相同的坐标处创建弹出菜单,而不是事件坐标。
self.popup_menu.tk_popup(x_button, y_button, 0)
问题是,当我移动我的界面窗口或滚动 scollbar(我的界面中有一个)并再次单击按钮时,弹出菜单不是在按钮所在的确切位置创建的。似乎 .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()
问候!
解决方案
按钮有几个方法可以满足您的需求: .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,很抱歉。如果您有任何问题或需要帮助调整它,请告诉我们。
推荐阅读
- php - 使用 vuejs 在 laravel 刀片视图中使用文件上传控件添加图像?
- function - 动态过滤器参数如何使用Query、importrange和indirect一起使用?或者可以完成任务的东西
- javascript - 有没有办法将算术运算符存储在变量中并在 JavaScript 的计算中使用变量本身?
- python - 单个“*”和“/”作为函数中的参数?
- javascript - 在 Vue 中保留 v-model 绑定的同时使用显示值
- c# - C# MongoDB 从每 n 组中获取 5 条记录
- javascript - 将 Object 属性值推送到数组
- c++ - QByteArray 包含无法转换为汉字的十六进制数据
- reactjs - 反应原生 git 忽略
- node.js - WebPush:授权头中的key与订阅该用户的sender ID不对应