【问题标题】:Invalid command name "exit" while executing "exit"执行“exit”时命令名称“exit”无效
【发布时间】:2017-06-30 05:47:20
【问题描述】:

当我在我的计算机(macOS Sierra,10.12.3)上执行一些代码时,我无法使用 Dock 中的“退出”或使用 command-Q 在第二个窗口中退出程序。我收到了这个反馈

invalid command name "exit"
    while executing
"exit"

来自 PyCharm。

我尝试在 IDLE (Python 3.6) 和 Terminal (Python 2.7) 中运行相同的脚本,它们都产生了同样的问题(尽管 IDLE 没有打印出来)。

无论我按了多少次 command-Q,窗口仍然存在,尽管我仍然可以使用窗口管理器退出窗口。有人可以告诉我为什么会出现问题吗?以下代码是可以重现问题的最简单版本:

#!/usr/bin/env python
try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

first = tk.Tk()
first_frame = tk.Frame(first, height=10, width=200)
first.wm_title("")
frame = tk.Frame(first)
tk.Button(frame, text="Next", command=lambda: first.destroy()).pack(side=tk.RIGHT)
tk.Button(frame,text="Quit",command=lambda: quit()).pack(side=tk.LEFT)
frame.pack(fill=tk.X)
first.protocol("WM_DELETE_WINDOW", lambda: quit())
first.mainloop()

root = tk.Tk()
root.attributes('-topmost', True)
root.title('')
test=tk.Label(root,text='test')
test.pack()
root.mainloop()

【问题讨论】:

    标签: python python-2.7 python-3.x tkinter pycharm


    【解决方案1】:

    我相信 Cmd-Q(即“Python”菜单)会被第一个主循环实例化。

    我有以下代码 sn-p 会引发相同的行为:

    def x_out():
        if tkMessageBox.askokcancel("Quit", "Do you really wish to quit?"):
             root.destroy()
    
    menu = Menu(root)
    root.config(menu=menu)
    filemenu = Menu(menu)
    
    menu.add_cascade(label="File", menu=filemenu)
    filemenu.add_separator()
    filemenu.add_command(label="Exit", command=x_out)
    

    如果我 File -> Exit 然后 Cmd-Q,我会得到和你一样的行为。如果我只是 Cmd-Q,没问题。似乎解决方案是确保您的 first.mainloop() 最后关闭。即在 root.destroy() 之前不要调用 first.destroy()

    【讨论】:

    • 确保当你回答时,它应该回答问题,而不是告诉其他人你有同样的问题或只告诉问题的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多