首页 文章

如何使用单选按钮更新按钮内的照片?

提问于
浏览
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()

在此先感谢您的帮助 .

1 回答

  • 1

    您可以在 Radiobutton 中使用 command= 分配将加载新图像并将其放入标签的功能 .

    工作示例(您只需设置路径)

    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()
    

相关问题