Я следовал вместе в YouTube учебник: https://www.youtube.com/watch?v=Zf-b2JVZs7gTkinter замок с sys.exit
Когда мы добрались до sys.exit(0)
Питон оболочка, кажется, реагирует, но окно я создаю замки вверх вместо закрытие. Другое странное, что когда я запускаю отладчик, программа работает как ожидалось.
#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()
В комментариях видео есть две вещи, которые торчат для меня, но я не могу понять, почему sys.exit(0)
не работает для меня, как он работал на него:
- Он используя Python 3
- Другие люди имеют эту же проблему, и нет никаких ответов, которые я вижу.
Я предполагаю, что это проблема с версией, но (как n00b). Я не знаю, в чем проблема.
Сведения об отключении Python _have_ изменены с версии на версию, даже в пределах 3.x. Я лично поставил бы root.destroy(), но не sys.exit() в обработчике quit, и позволил бы Python нормально выйти после возврата mainloop() и main(). Поскольку печать «до свидания» не печатается на gui и может выйти из строя (если вы запустите приложение с pythonw на окнах), я бы поставил print _after_ вызов main(). –
Спасибо Терри! Я добавил эту информацию в ответ ниже. – twasbrillig