Python 如何将带参数的函数应用于TkInter中的按钮

Python 如何将带参数的函数应用于TkInter中的按钮,python,tkinter,Python,Tkinter,我试图创建一个界面,用户单击TkInter按钮选择一种语言,然后该按钮调用一个函数(带有特定语言的参数)来设置程序的语言 我尝试使用Lambdas传递函数,但没有成功 def showLangButtons(): tk=tk() 根=画布(tk,宽度=100,高度=100) root.pack() langButtons=[] langs=[] 对于以langf表示的语言: 附加语言(a) 对于已排序(LAGS)中的a: 附加(按钮(根,文本=lang_名称[a][a],宽度=19, 高度=2,

我试图创建一个界面,用户单击TkInter按钮选择一种语言,然后该按钮调用一个函数(带有特定语言的参数)来设置程序的语言

我尝试使用Lambdas传递函数,但没有成功

def showLangButtons():
tk=tk()
根=画布(tk,宽度=100,高度=100)
root.pack()
langButtons=[]
langs=[]
对于以langf表示的语言:
附加语言(a)
对于已排序(LAGS)中的a:
附加(按钮(根,文本=lang_名称[a][a],宽度=19,
高度=2,命令=lambda:setLang(a)))
#函数的这一部分显示网格上的按钮
常数=0
而常数<(len(langButtons))**(1/2)/1.75:
常数+=1
n=0
当n
langf
是一个包含支持的语言列表的词典
lang_names
是一本包含每种语言名称的词典(由ISO 639-3代码索引)
setLang()
将字符串作为其参数,特别是该语言的ISO 639-3代码


我希望将语言设置为与用户单击的按钮对应,但它总是将语言设置为语言列表中的最后一种语言。例如,目前有两种受支持的语言:英语和冰岛语。无论我单击哪个按钮,它都会将语言设置为冰岛语,因为它是按字母顺序排列的最后一个。

使用
lambda
时需要强制关闭:

command=lambda lang=a: setLang(lang)

使用
lambda
时需要强制关闭:

command=lambda lang=a: setLang(lang)

读这段代码,所有的按钮都会做完全相同的事情是的,我肯定
command=setLang
表示每个按钮都将调用
setLang
。您永远不会重新定义什么是
setLang
,因此所有按钮都执行相同的操作。另外,
args
对于
按钮
类不是有效的选项。我不知道您想让我怎么想。在问题或答案中没有提到任何地方
guizero
,因此无论它做什么都是无关紧要的。底线是,你提供了一个无效的答案。你说的是谜语,我不知道你在说什么。你为什么认为我的想法太简单了?说不正确的代码确实不正确怎么“简单”呢?老兄。认真地任何定义过一次、从未重新定义并以完全相同的方式调用的函数,每次都绝对会以相同的方式调用。根据定义,以相同的方式调用它将导致以相同的方式调用它。在这段代码中,所有按钮都将执行完全相同的操作是的,我确定
command=setLang
表示每个按钮都将调用
setLang
。您永远不会重新定义什么是
setLang
,因此所有按钮都执行相同的操作。另外,
args
对于
按钮
类不是有效的选项。我不知道您想让我怎么想。在问题或答案中没有提到任何地方
guizero
,因此无论它做什么都是无关紧要的。底线是,你提供了一个无效的答案。你说的是谜语,我不知道你在说什么。你为什么认为我的想法太简单了?说不正确的代码确实不正确怎么“简单”呢?老兄。认真地任何定义过一次、从未重新定义并以完全相同的方式调用的函数,每次都绝对会以相同的方式调用。根据定义,以相同的方式调用它将导致以相同的方式调用它。