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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

783閲覧

PythonにてAPIとtkinterを使用した画像表示ができません

runtan66

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/01/18 03:39

編集2023/01/18 04:51

前提

tkinerとwebAPI(pokeAPI)を使用して制作中なのですが、
画像の表示方法がわからないので教えていただきたいです。

実現したいこと

実行しようとした手順としては、
①webAPIにて画像URLを取得
②①のURLを利用して画像をダウンロードして保存
③②で保存した画像を表示 ←ここができません

発生している問題・エラーメッセージ

該当のソースコード

Python

1 2 3### 4 5import tkinter as tk 6 7import requests 8 9 10canvas = tk.Tk() 11canvas.geometry('700x500') 12canvas.title('ポケモン図鑑') 13 14 15 16def getPokemon(canvas): 17 pokemon = textField.get() 18 api = "https://pokeapi.co/api/v2/pokemon/"+ pokemon +"/" 19 json_data = requests.get(api).json() 20 21 name = json_data['name'] 22 image_url = json_data['sprites']['front_default'] 23 file_path = './' + name + '.png' 24 25 def download_image(url, path): 26 getImage = requests.get(url,stream=True) 27 with open(path,"wb") as f: 28 f.write(getImage.content) 29 download_image(image_url, file_path) 30 31 32 33 text_info = name 34 label.config(text=text_info) 35 36 37 image_file = pokemon + ".png" 38 load = tk.PhotoImage(file=image_file) 39 canvas = tk.Canvas(bg="black", width=96, height=96) 40 canvas.place(x=300, y=250) 41 canvas.create_image(0, 0, image=load, anchor=tk.NW) 42 43 44 45 46 47textField = tk.Entry(canvas, justify='center', width=15, font=('Franklin Gothic Medium', 40, 'bold')) 48textField.pack(pady=20) 49 50 51 52textField.bind('<Return>', getPokemon) 53 54 55label = tk.Label(canvas, font=('Franklin Gothic Medium', 40, 'bold')) 56label.pack() 57 58 59canvas.mainloop() 60 61 62

試したこと

補足情報(FW/ツールのバージョンなど)

ダウンロードした画像を別プログラムで直接ファイル名を指定してimage_createしたら表示はされました。
37行目「image_file = name + ".png"」にしても結果は変わらず、これによってでてきたエラー分もありません。

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

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

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

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

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

can110

2023/01/18 04:20 編集

コードの一部分がコードブロックからはずれてインデントがなくなっていますので修正ください。 あとちょっと気になるのは 「name = json_data['name']」して「file_path = './' + name + '.png'」しているnameと 「pokemon = textField.get()」して「image_file = pokemon + ".png"」しているpokomonは 同じ文字列が入っている?でしょうか。
runtan66

2023/01/18 04:46

pokemonとして入力した文字がnameと同じでないと、ダウンロードもできない状態になるはずなので、同じ文字列のはずです。 試しに「image_file = name + ".png"」にして実行してみましたが、結果は同じくです。。。
guest

回答1

0

ベストアンサー

すでにある固定の画像で動作をテストしてみました。
提示コードでは読み込んだPhotoImageの画像リソースloadが関数を抜けた後に解放されてしまい、画像が表示されません。
とりあえず以下のような感じでglobalに持てば表示されるようになるはずです。

Python

1load = None 2def getPokemon(canvas): 3 # 略 4 global load 5 load = tk.PhotoImage(file=image_file)

投稿2023/01/18 05:11

can110

総合スコア38268

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

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

runtan66

2023/01/18 05:13

表示されました!!!!!!! ありがとうございます!!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問