##解決したいこと
ほかのプログラムを動かしているときに、Tkinterのファイルダイアログ(filedialog)を実行し、ファイルを選択するプログラム。一度目は成功するが、二度目は下記のようなエラーが発生する。それを防ぎたい。
##コード
Python
1import pyxel as px 2import tkinter as tk 3import tkinter.filedialog 4import os 5import threading 6 7class App: 8 def __init__(self): 9 self.sp = None #選択されたファイルのファイルパス 10 px.init(250,125,caption="") 11 px.run(self.update, self.draw) 12 13 def update(self): 14 if px.btnp(px.KEY_Q): 15 px.quit() 16 17 if px.btnp(px.KEY_F): 18 threading.Thread(target = self.open_file).start()#pyxelとtkinterを同時実行 19 20 def draw(self): 21 px.cls(0) 22 px.text(0,0,str(self.sp),7) #指定されたファイルパスを表示 23 24 def open_file(self): 25 fTyp = [("","")] 26 iDir = os.path.abspath(os.path.dirname(__file__)) 27 selected_file_path = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir=iDir) #ファイルパスの入力 28 self.sp = selected_file_path 29 30App()
##エラー
Error
1Exception in thread Thread-2: 2Traceback (most recent call last): 3 File "C:\Users\Sakuramochi\AppData\Local\Programs\Python\Python39\lib\threading.py", line 950, in _bootstrap_inner 4 self.run() 5 File "C:\Users\Sakuramochi\AppData\Local\Programs\Python\Python39\lib\threading.py", line 888, in run 6 self._target(*self._args, **self._kwargs) 7 File "c:\Users\Sakuramochi\kpp\Pyxel\pyxel coder\pyxel_coder.py", line 27, in open_file 8 selected_file_path = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir=iDir) 9 File "C:\Users\Sakuramochi\AppData\Local\Programs\Python\Python39\lib\tkinter\filedialog.py", line 382, in askopenfilename 10 return Open(**options).show() 11 File "C:\Users\Sakuramochi\AppData\Local\Programs\Python\Python39\lib\tkinter\commondialog.py", line 42, in show 12 w = Frame(self.master) 13 File "C:\Users\Sakuramochi\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 3121, in __init__ 14 Widget.__init__(self, master, 'frame', cnf, {}, extra) 15 File "C:\Users\Sakuramochi\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 2569, in __init__ 16 self.tk.call( 17RuntimeError: main thread is not in main loop
##バージョン
Python-最新
tkinter-8.6.9
pyxel-1.4.3
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/23 13:21