前提・実現したいこと
すべてのボタンに画像を表示したい
最後のボタンしか表示されない
プログラミング初心者です
for..inで生成しているボタンに画像を表示したいが、最後のボタンしか画像が表示されないです。
###試したこと
######forを使わず一つずつ表示してみる(画像もすべて表示される)
最初、ここを見ながら、画像ボタンのコードを書きました
これは意図通り動きました
test01.py
1import tkinter as tk 2# rootメインウィンドウの設定 3root = tk.Tk() 4 5# 画像ファイルをインスタンス変数に代入 <- 一つずつ画像を設定するときはすべて表示される 6img00 = tk.PhotoImage(file="00.png") 7img01 = tk.PhotoImage(file="01.png") 8img02 = tk.PhotoImage(file="02.png") 9 10# 画像のリサイズ 11img00 = img00.subsample(5, 5) 12img01 = img01.subsample(5, 5) 13img02 = img02.subsample(5, 5) 14 15# 各種ウィジェットの作成 16button00 = tk.Button(root, text="0", image=img00, compound="top") 17button01 = tk.Button(root, text="1", image=img01, compound="top") 18button02 = tk.Button(root, text="2", image=img02, compound="top") 19 20# 各種ウィジェットの設置 21button00.pack() 22button01.pack() 23button02.pack() 24 25root.mainloop() 26
for..inを使って表示をしてみる(最後の画像しか表示されない)
次に、これを、for..inのボタンに組み込もうとして、できませんでした。
最後のボタン以外画像が表示されませんでした。
test02.py
1import tkinter as tk 2root = tk.Tk() 3buttons = [] 4for i in range(3): 5 # 画像ファイルをインスタンス変数に代入 <- for..inだと最後以外の画像が表示されない 6 img = tk.PhotoImage(file= "0" + str(i) + ".png") 7 # 画像のリサイズ 8 img = img.subsample(5, 5) 9 10 # コールバック関数にボタン番号の値を引数で渡す 11 buttons.append(tk.Button(root,text=i,image=img, compound="top")) 12 buttons[i].pack() 13 14root.mainloop()
現象としてはテラテイルのこのページに似ていると思うのですが、初心者のため解決方法を見ても意味がよくわかりませんでした(コピペ元のサイトにも書いてあったインスタンスが上書き~等の文、重要そうな文章だと思うのですが、なんのことかよくわからない)
詳しい方いらっしゃったら、ご回答いただきたいです
よろしくお願いします
補足情報(FW/ツールのバージョンなど)
vscode
python
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/03 04:25
2021/07/03 05:09
2021/07/03 06:58