質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

2回答

1792閲覧

Python3 Tkinter canvasでの画像表示について

person

総合スコア223

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2020/04/11 02:08

編集2020/04/11 04:16

Tkinterで画像表示するときにクラス化前とクラス化後で実行結果が違いました。

クラス化前は期待通りに画像が表示されたのですが、クラス化後は画像が表示されません。

回答よろしくお願いします。

クラス化前

Python

1import tkinter as tk 2 3win = tk.Tk() 4win.geometry("720x480") 5 6win.rowconfigure(0, weight=1) 7win.columnconfigure(0, weight=1) 8 9imgfile = "c:/Users/ユーザ名/Desktop/test/test.png" 10img = tk.PhotoImage(file=imgfile) 11 12canvas = tk.Canvas(win) 13canvas.grid(row=0, column=0, sticky="nsew") 14canvas.create_image(0, 0, image=img, anchor=tk.NW) 15canvas.config(scrollregion=canvas.bbox("all")) 16 17win.mainloop()

クラス化後

Python

1import tkinter as tk 2 3class App: 4 def __init__(self, win): 5 self.win = win 6 self.win.geometry("500x500") 7 self.view_create() 8 9 def view_create(self): 10 self.win.rowconfigure(0, weight=1) 11 self.win.columnconfigure(0, weight=1) 12 13 self.imgfile = "c:/Users/ユーザ名/Desktop/test/test.png" 14 self.img = tk.PhotoImage(file=self.imgfile) 15 16 self.canvas = tk.Canvas(self.win) 17 self.canvas.grid(row=0, column=0, sticky="nsew") 18 self.canvas.create_image(0, 0, image=self.img, anchor=tk.NW) 19 20if __name__ == "__main__": 21 win = tk.Tk() 22 App(win) 23 win.mainloop()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

App(win) で作ったインスタンス(オブジェクト)を変数に代入していないため、誰も使用していないオブジェクトと判断されて破棄処理が行われ、画像データも破棄されてしまいます。

app = App(win) など、変数に代入してみてください。

クラスには、インスタンス生成後に動かすメソッドを作るといいですよ。
win.mainloop() のように app.start() とか app.run() とか。

投稿2020/04/11 03:11

編集2020/04/11 03:53
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

誤ったソースコードを貼り付けたため,混乱を招かぬように削除しました.
申し訳ないです.

投稿2020/04/11 04:25

編集2020/04/13 13:13
P_Beginner

総合スコア99

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問