2016-10-28 13 views
0

私は現在、tkinterでGUIを構築する方法を学びたいと思っています。テストアプリで問題が発生しました。ラジオボタンを使用してボタン内の写真を更新するにはどうすればよいですか?

私は、テキストの代わりにイメージを表示するボタンがあります。また、標準ボタンに表示されるイメージを制御するラジオボタンもあります。現在のところ、ラジオボタンは選択されているラジオボタンに関係なく、常にデフォルトの写真を持っているため、ラジオボタンはphotofilepath StringVarを更新していないようです。ここに私の(簡体字)コードがあります:

root = Tk() # Set up 
root.title("Test GUI") 
gui.grid(column=0, row=0, sticky=(N, W, E, S)) 

photofilepath = StringVar() # Set default photo 
photofilepath.set("C:/Users/Ben/Pictures/Default photo.png") 
photo = PhotoImage(file=photofilepath.get()) 

CalcButton = ttk.Button(gui, image=photo) 
CalcButton.grid(column=3, row=2, columnspan=1) 

# Set button photo 
Photo1Rbutton = ttk.Radiobutton(gui, text="Photo 1", variable=photofilepath, 
            value='C:/Users/Ben/Pictures/Photo 1.png') 
Photo1Rbutton.grid(column=4, row=2, sticky=S) 
Photo2Rbutton = ttk.Radiobutton(gui, text="Photo 2", variable=photofilepath, 
            value='C:/Users/Ben/Pictures/Photo 2.png') 
Photo2Rbutton.grid(column=4, row=3) 

root.mainloop() 

ありがとうございました。

+0

ラジオボタンは(自動的に) '光画像(...)は'新しいイメージをロードするために、そして 'CalcButton [画像] = photo'に実行されませんボタンの画像を置き換えます。 – furas

+0

ありがとう@furas私の以前の質問にも助けてくれました。 –

+0

あなたの例がうまくいかないので、私は完全な実際の例を作成しています;)たとえば、あなたは未知の変数 'gui'を持っています:) – furas

答えて

1

command=Radiobuttonに設定すると、新しい画像を読み込んでラベルに入れる機能を割り当てることができます。

例の作業(あなただけのセットのパスに持っている)

import tkinter as tk 
from tkinter import ttk 

# to easily change example 
DEFAULT = "C:/Users/Ben/Pictures/Default photo.png" 
PHOTO_1 = "C:/Users/Ben/Pictures/Photo 1.png" 
PHOTO_2 = "C:/Users/Ben/Pictures/Photo 2.png" 


def change_image(): 
    print(photo_filepath.get()) 

    photo = tk.PhotoImage(file=photo_filepath.get()) 
    calc_button['image'] = photo 
    calc_button.image = photo # solution for garbage-collector problem. you have to assign PhotoImage object to global variable or class variable 

    # - or - 

    photo['file'] = photo_filepath.get() 
    calc_button['image'] = photo 


root = tk.Tk() # Set up 
root.title("Test GUI") 

photo_filepath = tk.StringVar() # Set default photo 
photo_filepath.set(DEFAULT) 

photo = tk.PhotoImage(file=photo_filepath.get()) 

calc_button = ttk.Button(root, image=photo) 
calc_button.grid(column=3, row=2, columnspan=1) 

photo1_radiobutton = ttk.Radiobutton(root, text="Photo 1", variable=photo_filepath, 
            value=PHOTO_1, command=change_image) 
photo1_radiobutton.grid(column=4, row=2, sticky=tk.S) 

photo2_radiobutton = ttk.Radiobutton(root, text="Photo 2", variable=photo_filepath, 
            value=PHOTO_2, command=change_image) 
photo2_radiobutton.grid(column=4, row=3) 

root.mainloop() 
+0

助けてくれてありがとうございますが、実際には私にとってうまくいかない、しかし、それは透明/空のイメージにスワップし、私にデフォルトのボタンを残します。デフォルト画像のみが機能するようです。 –

+0

あなたは 'photo ['file'] = photo_filepath.get()'を試しましたか?私は 'PhotoImage'が関数で使用され、ローカル変数に代入されているときにガベージコレクタに問題があるかもしれないことを忘れていました。ガベージコレクタは画像を削除しますが、削除しないでください。私はコードを変更しました。 – furas

+0

ページの最後の注を参照してください。http://effbot.org/tkinterbook/photoimage.htm – furas

関連する問題