我正在尝试创建一个界面,用户单击TkInter按钮以选择一种语言,然后该按钮调用一个函数(带有特定语言的参数)来设置程序的语言。
我尝试使用Lambdas传递函数,但这没用。
def showLangButtons():
tk = Tk()
root = Canvas(tk, width=100, height=100)
root.pack()
langButtons = []
langs = []
for a in langf:
langs.append(a)
for a in sorted(langs):
langButtons.append(Button(root, text=lang_names[a][a], width=19,
height=2, command = lambda:setLang(a)))
# This part of the function displays the buttons on a grid
const = 0
while const < (len(langButtons))**(1/2)/1.75:
const += 1
n = 0
while n < len(langButtons):
langButtons[n].grid(row = int(n/const), column = n%const, sticky = W)
n+=1
tk.update()
langf
是一个词典,其中包含受支持的语言列表。 lang_names
是一个字典,其中包含每种语言的名称(由ISO 639-3代码索引)。 setLang()
以字符串作为参数,特别是该语言的ISO 639-3代码。
我希望相应于用户单击的按钮来设置语言,但是它总是将语言设置为语言列表中的最后一种语言。例如,目前支持2种语言:英语和冰岛语。不管我单击哪个按钮,它总是将语言设置为冰岛语,因为它的字母顺序是最后一个。
答案 0 :(得分:0)
使用lambda
时需要强制关闭:
command=lambda lang=a: setLang(lang)