2011-11-14 75 views
3

我有一個下拉菜單,一個button.I我試圖改變根據使用跟蹤下拉menu.I選擇按鈕上的文本,但給了我這個錯誤:如何動態更改tkinter中按鈕的文本?

TypeError: change_button_text() takes no arguments (3 given) 

這是一個例如:

from Tkinter import* 
import Tkinter as tk 
import os 


def change_button_text(): 
    buttontext.set(widget1.get()) 

app=Tk() 
app.title("Example") 
app.geometry('200x200+200+200') 

widget1 = StringVar() 
widget1.set('Numbers') 
files =["one",'two','three'] 
widget1DropDown = OptionMenu(app, widget1, *files) 
widget1DropDown.config(bg = 'white',foreground='black',font=("Times",16,"italic")) 
widget1DropDown["menu"].config(bg = 'white',font=("Times",12,"italic")) 
widget1DropDown.pack() 
widget1.trace("w", change_button_text) 


buttontext=StringVar() 
buttontext.set('Zero') 
button1=Button(app,textvariable=buttontext,font=("Times", 16),width=15,borderwidth=5) 
button1.pack(side=LEFT, padx=5,pady=8) 


app.mainloop() 

任何想法?謝謝。

回答

1

將您的函數定義change_button_text更改爲接受參數。從trace函數調用的回調函數將始終接收三個參數:變量的名稱,索引和模式。這些都不是真的有趣,但你的功能需要匹配這個簽名的回調工作。

要修復它,改變你的回調函數看起來像這樣:

def change_button_text(name, index, mode): 
    buttontext.set(widget1.get()) 

如果你喜歡它,你也可以把lambdatrace呼叫保持函數定義清潔(沿的,線「爲何定義變量那裏,如果你沒有使用這些」):

widget1.trace("w", lambda n, i, m: change_button_text()) 

你的回調可以保持原樣在這種情況下。