teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

用語訂正: ガベージコレクタ

2020/04/02 06:31

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  問題の原因
2
2
 
3
3
  generate関数が終了した後に、
4
- Pythonのガベージコレクタにより画像のリソースが破棄される為。
4
+ Pythonのガベージコレクタにより画像のリソースが破棄される為。
5
5
 
6
6
 
7
7
  解決策: 何処かに参照を保存する

1

類似質問を参考リンクとして追加

2020/04/02 06:31

投稿

teamikl
teamikl

スコア8817

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)