以下はPython tkinterでボタンをクリックするとラベルの画像が変わるプログラムです。
ボタン1の画像はメインルーチンで定義しており、
ボタン2の画像はクリックで発動する関数の中で定義しています。
結果、ボタン1は正しく動き、ボタン2は画像が表示されません。
(エラーメッセージなし)
このソースでは関数の中で画像を定義する意味はないように見えますが、
実際はファイル名が可変だったりImageDrawで画像を加工したりという処理を
入れるつもりです。
関数の中で画像を定義して既存のラベルにconfigureで変更表示させるには
どうしたらよいでしょうか。
Python3
1import tkinter as tk 2from PIL import Image, ImageTk 3import os 4 5# カレントディレクトリ 6os.chdir(os.path.dirname(os.path.abspath(__file__))) 7 8def click1(): 9 lbl_pic.configure(image=img_tk1) 10 lbl_text.configure(text="button1 pushed") 11 12def click2(): 13 img_pil2 = Image.open("image2.png") 14 img_tk2 = ImageTk.PhotoImage(img_pil2) 15 lbl_pic.configure(image=img_tk2) # これは動かない 16 lbl_text.configure(text="button2 pushed") # これは動く 17 18 19root = tk.Tk() 20root.geometry("800x600") 21 22lbl_text = tk.Label(text = "label") 23lbl_text.pack() 24 25img_pil1 = Image.open("image1.png") 26img_tk1 = ImageTk.PhotoImage(img_pil1) 27#img_pil2 = Image.open("image2.png") 28#img_tk2 = ImageTk.PhotoImage(img_pil2) 29 30lbl_pic = tk.Label(text="pic here") 31lbl_pic.pack() 32 33btn1= tk.Button(text = "button1" , command=click1) 34btn2= tk.Button(text = "button2" , command=click2) 35btn1.pack() 36btn2.pack() 37 38root.mainloop()
バージョン
Python 3.7.2
tcl/tk 8.6
Pillow 6.0.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/12 12:28