问题描述
我正在尝试创建一个列表框,在其中按“Enter 键”AKA <Return>
将
在选中的行前弹出一个菜单,如 this
我尝试使用 this 示例,但似乎菜单仅在鼠标所在的位置弹出
我问的甚至可能做吗?如果是这样,如何获取列表框中任何行的 x、y 位置?
遗憾的是,我什至无法提供伪代码来进一步解释,因为我什至不知道它会是什么样子,所以请原谅我不够清楚
解决方法
列表框的 curselection
方法将返回所选项目的列表。列表框的 bbox
方法将给出一个项目相对于列表框本身的坐标。您可以使用 winfo_rootx
和 winfo_rooty
来获取列表框在屏幕上的绝对坐标。您可以使用所有这些信息将菜单放在所选项目附近。
例如:
def show_popup(event):
selection = event.widget.curselection()
if selection:
item = selection[0]
rootx = event.widget.winfo_rootx()
rooty = event.widget.winfo_rooty()
itemx,itemy,itemwidth,itemheight = event.widget.bbox(item)
popup_menu.tk_popup(rootx+event.widget.winfo_width()-10,rooty+itemy+10)