#質問
Tkinterでリアルタイムで時間を表示するプログラムを作ろうと思って、Thread
を用いてプログラムを作ってみました。
実際動作を確認できたので良かったと思って終了した(Tkinterのウィンドウを閉じた)ところ、エラーが出てしまいました。
発生しているエラー(RuntimeError: main thread is not in main loop
)は、英語の記事にはいくつか出ていて、destroy()
を使う対処法(というよりはIDLEでのエラー表示をウィンドウを閉じることで、無かったことにしようとしている?)があったのですが、ターミナル等で実行するとやはりエラーメッセージが表示されるので、適切な対処方法を教えていただきたいです。
自分は、最初はThread
が原因かと思ったのですが、Thread
を用いないと時間の表示ができないのでThread
は残しておこうと思いました。
#該当のソースコード
Python3
1 2import tkinter as tk 3import datetime 4import time 5import threading 6 7#ウィンドウ作成 8win = tk.Tk() 9win.title("Tkinter Test") 10win.geometry("720x480") 11 12#現在日時を表示 13time_label = tk.Label(win,text="") 14time_label.grid() 15 16#現在日時の更新 17def print_nowtime(): 18 while True: 19 now = datetime.datetime.now() 20 time_label["text"] = "{0:%Y/%m/%d %H:%M:%S}".format(now) 21 time.sleep(1) #動作が重くなるため 22 23 24def main(): 25 26 #ボタンが押されたらテキストボックス内のの文字列を表示 27 def push(): 28 str = txtbox.get() 29 print(str) 30 31 txtbox = tk.Entry() 32 txtbox.grid() 33 btn = tk.Button(win, text="click", command=push) 34 btn.grid() 35 36 37 38if __name__ == "__main__": 39 40 #時間表示と入力文字列表示を並行 41 try: 42 thread_1 = threading.Thread(target=print_nowtime) 43 thread_2 = threading.Thread(target=main) 44 thread_1.start() 45 thread_2.start() 46 #とりあえず例外が生じたら弾く(試験的) 47 except: 48 print("except") 49 win.mainloop() 50 51
#該当のエラー
PS C:\Users\user\Desktop> & C:/Users/user/AppData/Local/Programs/Python/Python37/python.exe c:/Users/user/Desktop/test.py Exception in thread Thread-1: Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\threading.py", line 926, in _bootstrap_inner self.run() File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "c:/Users/user/Desktop/test.py", line 19, in print_nowtime time_label["text"] = "{0:%Y/%m/%d %H:%M:%S}".format(now) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1492, in __setitem__ self.configure({key: value}) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1485, in configure return self._configure('configure', cnf, kw) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1476, in _configure self.tk.call(_flatten((self._w, cmd)) + self._options(cnf)) RuntimeError: main thread is not in main loop
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/30 04:20