当我在我的计算机上执行某些代码(macOS Sierra,10.12.3)时,我无法使用dock中的'quit'或使用command-Q退出第二个窗口中的程序。我得到了这个反馈
invalid command name "exit"
while executing
"exit"
来自PyCharm的
我尝试在IDLE(Python 3.6)和终端(Python 2.7)中运行相同的脚本,并且它们都产生了同样的问题(尽管IDLE没有打印出来)。
无论我按下命令-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()
答案 0 :(得分:0)
我相信Cmd-Q(即" Python"菜单)会被第一个主循环实例化。
我有以下代码片段,它会导致相同的行为:
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)
如果我档案 - >然后退出Cmd-Q,我得到的行为和你一样。如果我只是Cmd-Q,没问题。似乎解决方案是确保你的first.mainloop()最后关闭。即,在root.destroy()
之后不要先调用first.destroy()