所以我有这个代码,并希望按钮在被点击时返回它的文本值。
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()
答案 0 :(得分:3)
执行此操作的简单方法是将item
字符串传递给command
回调,但您必须小心如何执行此操作。一种方法是使item
字符串成为lambda
函数的默认arg。它必须是默认的arg,以便item
在定义lambda
时绑定到该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小部件。
答案 1 :(得分:-1)
您可以使用lambda with命令将参数发送到' filmdatabase':它应该看起来像这样:
Iter 1 2.59423236 (Batch Size: 64)
Iter 2 2.25392553 (Batch Size: 64)
Iter 3 2.02569708 (Batch Size: 64)
...
Iter 12 1.53575111 (Batch Size: 64)
Iter 13 1.47963311 (Batch Size: 64)
Iter 14 1.42776408 (Batch Size: 64)
...
Iter 83 0.23911642 (Batch Size: 64)
Iter 84 0.22893350 (Batch Size: 64)
Iter 85 0.23644384 (Batch Size: 64)
...
Iter 94 0.21170238 (Batch Size: 64)
Iter 95 0.20718799 (Batch Size: 64)
Iter 96 0.21230888 (Batch Size: 64)
...
Iter 126 0.17334313 (Batch Size: 64)
Iter 127 0.16970796 (Batch Size: 64)
Iter 128 0.15931854 (Batch Size: 64)
Trn: 0.995659 Tst: 1.000000 All: 0.996094