如何动态更改tkinter中按钮的文本?

时间:2011-11-14 12:29:15

标签: python 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 个答案:

答案 0 :(得分:1)

更改change_button_text的函数定义以接受参数。从trace函数调用的回调函数将始终接收三个参数:变量的名称,索引和模式。这些都不是真的很有趣,但是你的函数需要匹配这个签名才能使回调起作用。

要解决此问题,请将回调函数更改为:

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

如果你喜欢它,你也可以在lambda调用中放置一个trace来保持功能定义的清晰(沿着这一行,“为什么要在那里定义变量)使用它们“):

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

在这种情况下,您的回调可以保持原样。

相关问题