【问题标题】:Tkinter Button Command switches when new Button is used [duplicate]使用新按钮时Tkinter Button Command切换[重复]
【发布时间】:2022-02-08 12:10:55
【问题描述】:

我面临一个问题,即我的第一个按钮正在使用第二个按钮的命令。在尝试以编程方式创建具有不同功能的按钮时,我多次遇到此逻辑错误,有没有办法解决这个问题,或者这是对 Tkinter 的限制?下面的 gif 说明了我的问题。

import tkinter as tk
root = tk.Tk()
root.geometry("400x400")

def print_when_clicked(message):
    print(message)

array = ["hi", "bye"]

for i in array:
    tk.Button(root, text=i, command=lambda:print_when_clicked(i)).pack()

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您已陷入经典的 Python 陷阱之一。问题是lambda 捕获了i 变量,而不是i 的值。所以,循环结束后,i 绑定到“bye”,两个函数都使用它。

    解决这个问题的诀窍是使用假的默认参数:

    for i in array:
        tk.Button(root, text=i, command=lambda i=i:print_when_clicked(i)).pack()
    

    【讨论】:

    • 您好,我想知道是否将 lambda 函数设为一个单独的变量,例如 l = lambda i: print_when_clicked(i),然后像 ``` for i in array: tk.Button(root, text=i, command =l(i)).pack() ``` 可能是一个很好的解决方法?
    • 不,这将在循环内调用 lambda,这不是您想要的。这和def l(i): / print_when_clicked(i) 完全一样。
    猜你喜欢
    • 2018-08-25
    • 2020-10-21
    • 1970-01-01
    • 2016-06-07
    • 2011-03-20
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多