Tkinterで画像を載せたウィンドウを複数生成したいのですが、画像が表示されないです。
python
1from tkinter import * 2from PIL import ImageTk, Image 3 4def generate_mother(): 5 for i in range(10): 6 generate() 7 8def generate(): 9 root2 = Toplevel() 10 image1 = ImageTk.PhotoImage(Image.open("./test.gif")) 11 label2 = Label(root2, image = image1, bg = "black") 12 label2.pack() 13 # root2.mainloop() 14 15root = Tk() 16button = Button(root, text = "foo", bg = "red", command = generate_mother) 17button.pack() 18 19root.mainloop()
エラーは生成されませんでした。ただ画像が表示されないです。
###試したこと
上記コードのコメント部のように追記すると画像が表示されますがgenerate()が一回しか実行されません。
そこでコメント部を追記しThreadingを使って同時実行したところエラーが発生しました。
それがこれ
python
1from tkinter import * 2from PIL import ImageTk, Image 3import threading 4 5def generate_mother(): 6 for i in range(10): 7 threading.Thread(target=generate).start() 8 9def generate(): 10 root2 = Toplevel() 11 image1 = ImageTk.PhotoImage(Image.open("./test.gif")) 12 label2 = Label(root2, image = image1, bg = "black") 13 label2.pack() 14 root2.mainloop() 15 16root = Tk() 17button = Button(root, text = "foo", bg = "red", command = generate_mother) 18button.pack() 19 20root.mainloop()
エラー
Exception in thread Thread-8: Traceback (most recent call last): File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner self.run() File "/usr/lib/python3.6/threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "test.py", line 37, in generate root2.mainloop() File "/usr/lib/python3.6/tkinter/__init__.py", line 1283, in mainloop self.tk.mainloop(n) RuntimeError: Calling Tcl from different appartment
このエラーがThread-8の番号の部分が変わっていっぱい出てきます。
この場合画像が表示されないウィンドウと表示されるウィンドウとあります。
###環境
python3.6.9
tkinter8.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/03 16:24