おはようございます。
問題文読ませていただきました。
恐らく、ガベージコレクションの問題が起きているようです。(ガベージコレクションとは?
画像描画を行うのが、関数内(test関数)ではなくmainloop関数箇所なので、test関数を抜けたタイミングで画像データの値が破棄されている模様です。
問題解決するために、Widget自身のimageへ値を代入する、global変数を利用する方法があります。
「Widget自身のimageへ値を代入する」に関しては、magichanさんが記載されているので、global変数を利用する方法を以下のコードでまとめました。
python
1import os
2import tkinter
3
4# 表示したい画像ファイルパス
5path = os.getcwd()+"/xxx.xxx"
6
7# 画像を表示する関数
8
9
10def test(event):
11 # ガベージコレクションが起こり、関数終了後、ローカル変数の場合に画像情報が自動消滅するのを防ぐため、global変数を利用する。
12 # 描画は、main関数内で展開される。 → ローカル変数だとmain関数実行時に画像情報が残っていない。 → グローバル変数を利用して、test関数終了後も値参照できるようにしておく。
13 # グローバル変数、ローカル変数とは? : https://itsakura.com/python-local-global#:~:text=%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%AF%E9%96%A2%E6%95%B0%E3%81%AE,%E5%A4%89%E6%95%B0%E5%90%8D%E3%81%A7%E3%82%82%E5%8F%AF%E3%81%A7%E3%81%99%E3%80%82
14 # ガベージコレクション : https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3#:~:text=%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%EF%BC%88%E8%8B%B1%3A%20garbage%20collection,%E3%83%9E%E3%83%83%E3%82%AB%E3%83%BC%E3%82%B7%E3%83%BC%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E7%99%BA%E6%98%8E%E3%81%95%E3%82%8C%E3%81%9F%E3%80%82
15 global image
16
17 # TkinterのWidgetで画像が扱える形へ変更する。
18 # 画像について : https://kuroro.blog/python/Z7k1LSyDyiDHtD5UCjmG/
19 image = tkinter.PhotoImage(file=path)
20 # Windowを親要素として、label Widgetを作成する。
21 # image : 画像情報
22 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
23 label = tkinter.Label(root, image=image)
24 # Windowを親要素として、label Widgetをどのように表示するのか?
25 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
26 label.pack()
27
28
29# Windowを作成する。
30root = tkinter.Tk()
31
32# Windowの画面サイズを設定する。
33# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
34root.geometry("400x300+1000+10")
35
36# Windowを親要素として、button Widgetを作成する。
37# text : テキスト情報
38# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/
39Button = tkinter.Button(root, text="button")
40# Windowを親要素として、button Widgetをどのように表示するのか?
41# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
42Button.pack()
43
44# イベントと関数の実行を紐づける。
45# 第一引数 : イベント内容。button Widgetがクリックされた場合
46# 第二引数 : 第一引数が試行された場合に、実行する関数名。testとする。
47# 戻り値 : なし
48# bindについて : https://kuroro.blog/python/eI5ApJE1wkU7bHsuwk0H/
49Button.bind("<Button-1>", test)
50
51# Windowをループさせて、継続的にWindow表示させる。
52# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
53root.mainloop()
ご確認のほど、よろしくお願いいたします。????♂️
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。