如何在Python Tkinter中更新带图片的标签?

2 投票
1 回答
8606 浏览
提问于 2025-04-17 06:11

我有一个下拉菜单,里面有几个选项,还有一个带图片的标签。

我想根据下拉菜单中选择的选项来更换图片,但我不知道该怎么做。

下面是一个示例代码:

from Tkinter import*
import Tkinter as tk

def image():
    list1=['im1.gif','im2.gif']
    studDropDown['menu'].delete(0, "end")
    for string in list1:
        studDropDown['menu'].add_command(label=string,command=lambda value=string:studFiles.set(value))


app=Tk()
app.title("Example")
app.geometry('500x200+200+200')
app.configure(background='black')
app.resizable(0,0)

button1=Button(app,text='Press me',command=image)
button1.pack()


studFiles = StringVar()
studFiles.set('Image')
files =["Please Wait"]
studDropDown = OptionMenu(app, studFiles, *files)
studDropDown.config(font=("Times",16,"italic"))
studDropDown["menu"].config(font=("Times",16,"italic"))
studDropDown.pack()


photo =PhotoImage(file='im.gif')
label = Label(app,image=photo)

label.image = photo # keep a reference!
label.pack()

app.mainloop()

也许用标签来显示图片并不是最合适的选择。

有没有什么好的主意呢?

1 个回答

7

这里有一个简单的例子,基于你提供的代码:

from Tkinter import *

def change_image(*args):
    # Change image of label accordingly
    label.config(image=photos[int(studFiles.get())])

app = Tk()
app.title("Example")
app.geometry('500x200+200+200')
app.configure(background='black')
app.resizable(0,0)

studFiles = StringVar()
studFiles.set('Image')
files =['0', '1'] # Number is corresponding list index
studDropDown = OptionMenu(app, studFiles, *files)
studDropDown.config(font=("Times", 16, "italic"))
studDropDown["menu"].config(font=("Times", 16, "italic"))
studDropDown.pack()

studFiles.trace("w", change_image)

# List of photoimages for each image
photos =(PhotoImage(file='im.gif'), PhotoImage(file='im2.gif'))
label = Label(app,image=photos[0])
label.pack()

app.mainloop()

你需要为每个想要显示的图形创建一个包含PhotoImage的列表或元组。同时,你还需要跟踪你的StringVar,这样你就能知道OptionMenu的值什么时候发生了变化。然后,你只需要用config方法来设置标签的图片就可以了。

撰写回答