Python 2.7.x Tkinter弹出菜单错误

Python 2.7.x Tkinter弹出菜单错误,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我试图在Tk中创建一个弹出菜单,但是当我到达要显示菜单的部分(menu.post)时,我得到一个“TclError”异常。我不明白为什么,当我试图进入Tk代码以查看出了什么问题时,我只进入了几个步骤,然后突然无法进入代码,异常冒了出来。有人能告诉我我做错了什么吗?我认为这与我如何创建菜单有关 class Bugger(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwa

我试图在Tk中创建一个弹出菜单,但是当我到达要显示菜单的部分(menu.post)时,我得到一个“TclError”异常。我不明白为什么,当我试图进入Tk代码以查看出了什么问题时,我只进入了几个步骤,然后突然无法进入代码,异常冒了出来。有人能告诉我我做错了什么吗?我认为这与我如何创建菜单有关

class Bugger(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        # setup window attributes
        self.overrideredirect(True)
        self.attributes('-topmost', 1)

        # set starting positions and values
        self.TotalAssigned = "0"
        self.TotalResolved = "0"

        # add first label
        self.label1 = tk.Label(self, text=self.TotalAssigned, bg="red")
        self.label1.pack(side="left", fill="both", expand=True)

        # add second label
        self.label2 = tk.Label(self, text=self.TotalResolved, bg="yellow")
        self.label2.pack(side="right", fill="both", expand=True)

        # add right-click menu
        self.menu = tk.Menu(master=self, tearoff=0)
        self.menu.add_command(label="Exit", command=self.ExitMenu)
        self.menu.add_command(label="Preferences", command=self.Preferences)
        self.bind("<ButtonRelease-2>", self.popup)

    def ExitMenu(self):
        exit(0)

    def popup(self, event):
        self.menu.post(event.x_root,event.y_root)

    def Preferences(self):
        print ("In preferences dialog")


if __name__ == "__main__":

    bugger = Bugger()
    bugger.mainloop()
Tcl错误


有什么建议吗?

好的。我认为您必须将菜单分配给根窗口。为此,添加行
self.config(menu=self.menu)
。另一方面,您调用菜单时没有显示窗口

编辑

此外,它不能设置为
overrideredirect
,因为它不支持弹出菜单。如果在窗口未处于焦点时右键单击该窗口,也会出现错误


希望这有帮助

请显示错误编辑原始评论以添加错误消息。如果您创建了。您问题中的大多数代码都不是重现问题所必需的,并且缺少必需的代码。请尝试用数字替换
event.x\u root,event.y\u root
,看看它是否会给您带来错误。因此,我将问题更新为仅mcve代码。还有@JonahFleming,我尝试将event.x_root和event.y_root更改为数字,但没有成功。但是谢谢你的建议,太好了!谢谢你的回答@jonah!哎呀。我说得太快了。我试过了,但没有改变任何事情。当我调用self.menu.post时,我仍然收到错误。我已经修复了@Goishin的答案,但它可能会阻塞你的应用程序。对不起……:(好吧,当我现在连续右键单击几次时,我会遇到一系列异常,有时会出现弹出菜单。所以,我想从技术上说,你是对的。但这完全破坏了我的应用程序。也许右键单击菜单不是一种好办法:(@Goishin我想在你点击之前确保窗口处于焦点位置,以消除错误。还有,为什么你在OverrideDirect中需要它?OverrideDirect似乎可以消除窗口关闭、最小化、最大化等功能。这是一个小应用程序,只有两个小浮点数,你可以在屏幕上的任何位置移动。它们是支持的ed始终是ontop,并且非常小且不引人注目。他们只是通过查询jira的rest api来提供分配给您的bug数量。如果我不使用OverrideDirect,那么您将获得最小、最大、关闭按钮。它看起来和工作起来都很好。但窗口按钮很难看。
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1536, in __call__
    return self.func(*args)
  File "/Users/robb/source/Bugger.py", line 73, in popup
    self.menu.post(event.x_root,event.y_root)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2797, in post
    self.tk.call(self._w, 'post', x, y)