在我的应用程序中,我有一个应用程序列表,
apps = [
App("app1", "username1", "password1", "----"),
App("app2", "username2", "password2", "----"),
App("app3", "username3", "password3", "----"),
]
(App() 只是一个包含每个应用程序数据的类)
在代码的后面,我循环遍历该数组,为每个应用程序创建一个标签小部件。
appLabels = []
for a in apps:
lbl = ptg.Label(a.name)
def left_mouse():
showEditForm(a)
lbl.on_left_click = lambda _: left_mouse()
appLabels.append(lbl)
但是,当我单击任何标签时,它总是用 app3 调用
showEditForm()
。如何为每个应用程序创建一个唯一的事件处理程序,以便使用正确的应用程序调用 showEditForm()
?
这是常见问题。当您迭代列表时,每次都会重新定义函数 left_mouse,并且 lambda 将引用最新的一个,在您的情况下是第三个。要解决此问题,请考虑向 lambda 和 left_mouse 函数添加一个具有默认唯一值的参数(在您的情况下可能是
a
),如以下更正后的代码所示:
appLabels = []
def left_mouse(app):
showEditForm(app)
for a in apps:
lbl = ptg.Label(a.name)
lbl.on_left_click = lambda _, app=a: left_mouse(app)
appLabels.append(lbl)