我有一个下拉菜单和一个按钮。我正在尝试根据下拉菜单中的选项更改按钮上的文本。我使用了跟踪,但是给了我这个错误:
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()
有什么想法吗?谢谢。
答案 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())
在这种情况下,您的回调可以保持原样。