【问题标题】:How can i do multiples buttons on tkinter with different commands? [duplicate]如何使用不同的命令在 tkinter 上执行多个按钮? [复制]
【发布时间】:2021-06-14 02:39:14
【问题描述】:

所以我的问题是在这个程序中我想创建“x”按钮(x 是列表的长度),每个按钮都有列表中元素的名称并调用函数“ChoicePage”以元素名称作为参数

示例: 如果我有一个类似[house, hospital, shop] 的列表,程序会创建 3 个按钮:房屋、医院和商店,它们调用 ChoicePage(a) 并带有 = "house"、"hospital" 或 "shop"

 for i in range(len(L)):

        a = L[i]

        Button(fen1, text=a, relief=RAISED, command = lambda:(ChoicePage(a))).pack()

    fen1.mainloop()

这里的问题是它总是用列表的最后一个元素调用 ChoicePage(在前面的例子中它是“shop”)

我该如何解决这个问题?

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    当您在循环中创建 lambda 时,它们最终会绑定到同一个变量(具有最后一次循环迭代的值)。您可以使用部分将值绑定到函数或在函数内存储值的其他一些方法。

    from functools import partial
    for i in range(len(L)):
            a = L[i]
            Button(fen1, text=a, relief=RAISED, command = partial(ChoicePage, a)).pack()
    fen1.mainloop()
    

    【讨论】:

    • lambdas都可以正常使用。
    【解决方案2】:

    你应该做的是这样调用 lambda:

    command=lambda m=a: ChoicePage(var=m) 
    

    var 应该是 ChoicePage 函数的参数

    这样变量会对应右键存储

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2016-01-28
      • 2022-01-23
      • 2018-08-11
      • 1970-01-01
      • 2021-07-08
      相关资源
      最近更新 更多