gpt4 book ai didi

python - 如何将带有参数的函数应用于 TkInter 中的按钮

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:59 28 4
gpt4 key购买 nike

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

我尝试使用 Lambda 来传递函数,但这不起作用。

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 种语言:英语和冰岛语。无论我单击哪个按钮,它总是将语言设置为冰岛语,因为它按字母顺序排列在最后。

最佳答案

使用lambda时需要强制关闭:

command=lambda lang=a: setLang(lang)

关于python - 如何将带有参数的函数应用于 TkInter 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57748956/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com