前提・実現したいこと
- 特定のフォルダ(今回は
Desktop\new
)に保存されている
JPG、PNGどちらかの拡張子の画像ファイルをランダムで取得する
0. 画像を適切なサイズにリサイズする
0. 画面に表示する
ということを PySimpleGUI で実現させたいのですが、以下のエラーが解決できずに困っています。
お力をお貸しいただけますと幸いです。
補足
基本的にはJPG画像がほとんどですが、両方の拡張子の画像を表示させたいです。
tkinter では表示できる拡張子が限られているため、Pillow ライブラリの ImageTk を採用しています。
発生している問題・エラーメッセージ
例外が発生しました: TclError couldn't recognize image data
該当のソースコード
Python
1#!python3.7 2 3import glob 4import random 5import tkinter as tk 6 7import PySimpleGUI as sg 8from PIL import Image, ImageTk 9 10dir_name =r'C:\Users\USER\Desktop\new' 11img_types = (".jpg",".png") 12 13#ランダムに画像を1枚取る関数 14def random_pick(): 15 global dir_name 16 global img_types 17 while True: 18 img_list = glob.glob(dir_name + '\*') 19 pickfile = random.choice(img_list) 20 if pickfile.lower().endswith(img_types): 21 return pickfile 22 23# 画像をリサイズするための倍率を求める 24def set_magnification(iw ,ih): 25 rew = iw 26 reh = ih 27 n = 1 28 while rew > 600 and reh > 600: 29 rew = iw /n 30 reh = ih /n 31 n += 0.5 32 return n 33 34def get_img_data(f): 35 """Generate image data using PIL""" 36 print("open file:", f) 37 img = Image.open(f) 38 magf = set_magnification(img.width, img.height) 39 img_resize = img.resize((int(img.width/magf), int(img.height/magf))) 40 return ImageTk.PhotoImage(img_resize) 41 42 43def main(): 44 sg.ChangeLookAndFeel('BlueMono') 45 pfile = random_pick() 46 47 image_elem = sg.Image(data=get_img_data(pfile)) 48 filename_display_elem = sg.Text(pfile, size=(80, 3)) 49 layout = [[filename_display_elem],[image_elem],[sg.OK()]] 50 51 window = sg.Window('画像を表示します', layout, return_keyboard_events=True, 52 location=(0, 0), use_default_focus=False) 53 54# event loop 55 while True: 56 event, value = window.read() # ????ここでエラー 57 print(event,value) 58 if event in (None, 'Exit'): 59 break 60 window.close() 61 62if __name__ == "__main__": 63 root = tk.Tk() 64 root.withdraw() 65 main() 66 67 68
試したこと
こちらの記事を元にコードを作成しました。
JPG、PNGのどちらかだけに絞って試してみましたが、同様のエラーが出ました。
情報(FW/ツールのバージョンなど)
Windows10
Python3.7
VScode
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/27 08:46