如何让tkinter按钮返回它的文本值

时间:2017-10-24 17:48:39

标签: python button tkinter

所以我有这个代码,并希望按钮在被点击时返回它的文本值。

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()

2 个答案:

答案 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