如何在TkInter

时间:2019-09-01 19:42:20

标签: python tkinter

我正在尝试创建一个界面,用户单击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种语言:英语和冰岛语。不管我单击哪个按钮,它总是将语言设置为冰岛语,因为它的字母顺序是最后一个。

1 个答案:

答案 0 :(得分:0)

使用lambda时需要强制关闭:

command=lambda lang=a: setLang(lang)