【发布时间】:2015-01-13 18:36:23
【问题描述】:
我在 youtube 教程中关注: https://www.youtube.com/watch?v=Zf-b2JVZs7g
当我们到达sys.exit(0)
Python shell 似乎正在响应,但我创建的窗口锁定而不是关闭。另一个奇怪的事情是,当我运行调试器时,程序按预期运行。
#Python 2.7.8
#Idle 2.7.8
#Tkinter 8.5.15
import sys
import Tkinter
import turtle
from Tkinter import *
def main():
root = Tk()
root.title("Draw!")
root.geometry("800x800")
cv = Canvas(root, width=600, height=600)
cv.pack(side=LEFT)
t = turtle.RawTurtle(cv)
screen = t.getscreen()
screen.setworldcoordinates(0,0,600,600)
frame = Frame(root)
frame.pack(side = RIGHT, fill = BOTH)
screen.tracer(0)
def quitHandler():
print ("Goodbye")
sys.exit(0)
##raise SystemExit
##exit()
quitButton = Button(frame, text="Quit", command = quitHandler)
quitButton.pack(side=BOTTOM)
def clickHandler(x,y):
t.goto(x,y)
screen.update()
screen.onclick(clickHandler)
def dragHandler(x,y):
t.goto(x,y)
screen.update()
t.ondrag(dragHandler)
root.mainloop()
if __name__ == "__main__":
main()
在视频的 cmets 中有两件事让我印象深刻,但我不明白为什么 sys.exit(0) 对我没有像对他一样有用:
- 他正在使用 Python 3
- 其他人也有同样的问题,但我看不到任何答案。
我的猜测是版本问题,但是(作为 n00b)我不知道问题是什么。
【问题讨论】:
-
Python 关闭的细节已经随着版本的变化而变化,即使在 3.x 中也是如此。我个人会将 root.destroy() 而不是 sys.exit() 放在退出处理程序中,并在 mainloop() 和 main() 调用返回后让 Python 正常退出。由于打印 'goodbye' 不会打印到 gui,并且可能会失败(如果您在 windows 上使用 pythonw 运行应用程序),我会将 print 放在 main() 调用之后。
-
谢谢特里!我将此信息添加到下面的答案中。
标签: python python-2.7 python-3.x tkinter