如何在tkinter中创建一个与列表框相关联的弹出菜单?

3
我试图创建一个列表框,按下'回车键',即<Return>,将弹出一个菜单在所选行前面,就像这样。我尝试使用这个示例,但似乎菜单仅在鼠标位置弹出。

我想知道是否有可能实现我的要求?如果可以,如何获取列表框中任何一行的x,y位置?

很遗憾,我甚至无法提供伪代码来进一步解释,因为我不知道它会是什么样子,请原谅我的表达不够清晰。
1个回答

3

curselection 方法可返回列表框中所选项的列表。列表框的 bbox 方法将给出一个相对于列表框自身的项目坐标。您可以使用 winfo_rootxwinfo_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)

非常感谢,每次我遇到tkinter问题时,您的答案似乎总是能够帮助我解决。请问您是从哪里学习的tkinter?我知道这可能是多年的经验积累,但您是否考虑过创建自己的网站来传授这些知识呢? - cak3_lover
2
我在90年代中期开始使用tcl/tk创建商业应用程序。tkinter只是tcl/tk的包装器。我通过回答这个网站上的问题来学习tkinter,这迫使我将自己对用python的tk的知识应用起来。 - Bryan Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接