web-dev-qa-db-ja.com

root.destroy()とroot.quit()の違いは何ですか?

Python using tkinter、rootウィンドウを閉じるときのroot.destroy()root.quit()の違いは何ですか?

一方が他方よりも好まれますか?一方が他方が解放しないリソースを解放しますか?

34
Gary Willoughby

quit()はTCLインタープリターを停止します。 Tkinterアプリも停止するため、これはほとんどの場合、必要なものです。たとえば、次のような場合は問題になる可能性があります。アイドル状態からアプリを呼び出します。アイドルはそれ自体がTkinkerアプリであるため、アプリでquit()を呼び出して、TCLインタープリターが終了すると、アイドルも終了します(または混乱します)。

destroy()はメインループを終了し、すべてのウィジェットを削除します。したがって、別のTkinterアプリからアプリを呼び出す場合、または複数のメインループがある場合は、より安全なようです。」

http://www.daniweb.com/forums/thread66698.html から取得

25
ErikT

root.quit()により、メインループが終了します。すべてのウィジェットと同様に、インタプリタはそのままです。この関数を呼び出すと、root.mainloop()の呼び出し後に実行されるコードを作成でき、そのコードはウィジェットと対話できます(たとえば、エントリウィジェットから値を取得します)。

Root.destroy()を呼び出すと、すべてのウィジェットが破棄され、mainloopが終了します。 root.mainloop()の呼び出し後のコードはすべて実行されますが、ウィジェットにアクセスしようとすると(たとえば、エントリウィジェットから値を取得する)、ウィジェットが存在しなくなるため失敗します。

23
Bryan Oakley