2011-11-12 127 views
1

我有一個下拉菜單,有幾個選項和一個帶有圖像的標籤。如何用python中的tkinter中的圖像更新標籤?

我想根據從下拉菜單中選擇的選項更改圖像,但我無法弄清楚。

示例代碼:

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

也許甚至使用標籤的顯示圖像是不適合的。

任何想法?

+0

我不知道爲什麼,但從每個帖子開始時的幾個字都失蹤了。 – GiannisIordanou

回答

5

這是根據您所提供的代碼的一個簡單的例子:

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方法設置標籤的圖像。

+0

謝謝,我用它,它的工作。 – GiannisIordanou