2017-02-12 105 views
1

当我在计算机上执行某些代码时(macOS Sierra,10.12.3),我无法在第二个窗口中使用退出程序退出码头或命令-Q。我得到了这个反馈执行“退出”时无效的命令名“exit”

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() 

回答

0

相信Cmd的-Q(即“巨蟒”菜单)获取第一主循环实例化。

我有下面的代码片段诱导相同相同的行为:

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()是最后关闭的。即不要调用first.destroy()直到root.destroy()之后