前提・実現したいこと
2段階のプルダウンを作成して、選択された項目によって表示する画像を変えるGUIプログラムを作成しています。Tkinterを使用しています。画像を変えるのにitemconfigを使いました。
言語はPython3.7.3、Anaconda3上で実装しています。
発生している問題・エラーメッセージ
このプログラムでは'alphabet'の'a'を選択するとimg_1_2のファイルの1番目の画像を表示するように作成しましたが、'alphabet'の'a'を選択するとなぜかcanvasの表示が背景色の真っ黒(画像が表示されてない)になってしまいます。
エラーメッセージは一切出ていませんが上手く動作しません。
恐らく画像切り替えの部分に問題があるのだと思うのですが、どう直したら良いか分かりません。
該当のソースコード
Python
1#画像のファイルパス 2img_1_2 = glob.glob("C:/Users/admin/Desktop/clothes_pic/pic/1/2/*") 3##画像表示部分 4#画像を表示するための準備 5img = Image.open('C:/Users/admin/Desktop/clothes_pic/pic/top.bmp') 6img = ImageTk.PhotoImage(img) 7#画像を表示するためのキャンバスを作成( 8canvas = tkinter.Canvas(bg = "black",width=400,height=800) 9canvas.place(x=250,y=280)#左上の座標を指定 10#キャンバスに画像を表示する。第一引数と第二引数はx,yの座標 11image_on_canvas = canvas.create_image(0,0,image=img,anchor = tkinter.NW) 12 13 14#プルダウンの作成 15#プルダウンの中身 16lang = {'ひらがな': ('あ', 'い', 'う', 'え', 'お'), 17 'カタカナ': ('ア', 'イ', 'ウ', 'エ', 'オ'), 18 'alphabet': ('a', 'i', 'u', 'e', 'o')} 19#一個目のプルダウン 20cb1 = ttk.Combobox(window, state='readonly',width=30,height=50) 21cb1['values'] = list(lang.keys()) 22cb1.place(x=250,y=190) 23#二個目のプルダウン 24cb2 = ttk.Combobox(window, state='readonly',width=30,height=50) 25cb2['value'] = '' 26cb2.place(x=450,y=190) 27 28def selected(event): 29 var = cb1.get() 30 cb2['value'] = lang[var] 31 x=var 32 return var 33 34def select_cb(event): 35 global window 36 37 window.after(1000,select_pic(cb2.get())) 38 39 40cb1.bind('<<ComboboxSelected>>', selected) 41cb2.bind('<<ComboboxSelected>>', select_cb) 42 43 44#画像の切り替え部分 45number=0 46 47def select_pic(x): 48 global length,filename,canvas,window 49 50 filename=[] 51 if x=="a": 52 for name in img_1_2: 53 filename.append(name) 54 length=len(filename) 55 56 #切り替えたい画像を定義 57 print(filename[number]) 58 img2 = Image.open(filename[number]) 59 img2 = ImageTk.PhotoImage(img2) 60 #画像のを差し替え 61 canvas.itemconfig(image_on_canvas,image=img2) 62 63window.mainloop() 64 65 66
試したこと
最初はselect_picのcanvasが反応していないのかと思い、globalでcanvasの定義をしてみたりしたのですが変わりませんでした。
補足情報(FW/ツールのバージョンなど)
Pythonは最新のバージョンです。Pythonのプログラムはあまり経験はなく、classはよくわからないのでできれば使いたくないです、、。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/03 12:28