回答編集履歴
2
用語訂正: ガベージコレクタ
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
問題の原因
|
2
2
|
|
3
3
|
generate関数が終了した後に、
|
4
|
-
Pythonのガベ
|
4
|
+
Pythonのガベージコレクタにより画像のリソースが破棄される為。
|
5
5
|
|
6
6
|
|
7
7
|
解決策: 何処かに参照を保存する
|
1
類似質問を参考リンクとして追加
answer
CHANGED
@@ -19,6 +19,16 @@
|
|
19
19
|
tkinterでは各ウィジェットは引数に親要素の指定(キーワード引数でmaster=)があるので、
|
20
20
|
その辺りを調べてみてください。
|
21
21
|
|
22
|
+
|
23
|
+
追記: 関連質問を参考に、`label2.image = image` でも画像表示できました。
|
24
|
+
何処かに変数の参照を残せればよいので、.image の部分は何でもよいです。
|
25
|
+
```
|
26
|
+
image1 = ImageTk.PhotoImage(Image.open("./test.gif"))
|
27
|
+
label2 = Label(root2, image = image1, bg = "black")
|
28
|
+
label2.image = imabe1
|
29
|
+
```
|
30
|
+
|
31
|
+
|
22
32
|
----
|
23
33
|
|
24
34
|
Toplevel() を入れた root2 変数も関数が終わった後も、
|
@@ -27,4 +37,9 @@
|
|
27
37
|
|
28
38
|
tkinterが行っているのは、tcl という別プログラミング言語の環境にコマンド文字列を送っているだけで
|
29
39
|
ウィジェットの管理などは tcl 側で行われている為影響しません。
|
30
|
-
root2変数が Python 内では破棄された後も、開かれたウィンドウは tcl 側で残り続けます。
|
40
|
+
root2変数が Python 内では破棄された後も、開かれたウィンドウは tcl 側で残り続けます。
|
41
|
+
|
42
|
+
|
43
|
+
----
|
44
|
+
追記: 関連
|
45
|
+
- [[teratail-148572] python のtkinterを使って画像表示がうまくいかない](https://teratail.com/questions/148572)
|