9

クラスでは、関数でTkinterCanvasを作成しています。この関数は別のクラスによって呼び出されています。Tkinterウィンドウを30秒間ポップアップしてから、それ自体を閉じたいと思います。私はそれを呼んでいます

master.mainloop()
time.sleep(30)
master.destroy() 

しかし、エラーが発生します

"elf.tk.call('destroy'、self._w)_tkinter.TclError:" destroy "コマンドを呼び出せません:アプリケーションが破棄されました"

では、どうすればそれ自体を閉じることができますか?

4

2 に答える 2

25

tkinterでは使用time.sleep()しないでください。代わりに、after閉じたいウィジェットで関数を呼び出します。

最も単純な例を次に示します。

import tkinter as tk

w = tk.Tk()
w.after(30000, lambda: w.destroy()) # Destroy the widget after 30 seconds
w.mainloop()
于 2013-03-09T01:55:28.767 に答える
4

ここでの問題はmainloop()、GUI がシャットダウンするまで戻らないことです。

したがって、 GUI がシャットダウンして自身を破壊してから30 秒後に、それを破壊しようとします。そして明らかにそれは失敗します。

ただし、メイン ループ内でsleepand呼び出しを移動することはできません。メイン ループの途中で GUI がフリーズするからです。destroysleep

そのため、メインループを停止しない何らかのタイマーが必要です。まさにその目的のためtkinterのメソッドが含まれています。この回答は、それを使用する詳細な例を示しています。after

于 2013-03-09T01:55:12.423 に答える