所以我有这段代码,希望按钮在被点击时返回它的文本值。
film = ['Woezel & Pip Op zoek naar de Sloddervos!', 'The White Snake',
'Proof of Life', 'Rise of the Planet of the Apes',
'Mona Lisa Smile', '2 Guns', 'Max Payne', 'De eetclub']
for item in film:
button = Button(master=aanbiederspage, text=item,
command=filmdatabase).pack()
执行此操作的简单方法是将 item
字符串传递给 command
回调,但您必须谨慎执行此操作。一种方法是使 item
字符串成为 lambda
函数的默认参数。它必须是默认 arg,以便 item
在定义 lambda
时绑定(bind)到该 arg。如果我们只是执行 lambda : func(item)
那么每个按钮都会打印列表中的最后一项。发生这种情况是因为在这种情况下,Python 会在调用回调时查找 item
的当前值。
import tkinter as tk
film = ['Woezel & Pip Op zoek naar de Sloddervos!', 'The White Snake',
'Proof of Life', 'Rise of the Planet of the Apes', 'Mona Lisa Smile',
'2 Guns', 'Max Payne', 'De eetclub']
def func(item):
print(item)
root = tk.Tk()
for item in film:
tk.Button(master=root, text=item, command=lambda s=item: func(s)).pack()
root.mainloop()
请注意,在我的代码中,我不如何执行 button = tk.Button(
... 进行该分配毫无意义。首先,我们没有保存这些小部件在任何地方,但更重要的是,.pack
返回 None
,所以这样做
button = Button(master=aanbiederspage, text=item, command=filmdatabase).pack()
实际上将 button
设置为 None
,而不是 Button 小部件。
我是一名优秀的程序员,十分优秀!