【问题标题】:How to assign a label's text to a button's command in Tkinter [duplicate]如何将标签的文本分配给Tkinter中的按钮命令[重复]
【发布时间】:2017-10-18 07:16:41
【问题描述】:

我已经编写了这段代码。我希望它在我按下按钮时在每个按钮附近打印标签的文本。例如,当我按下第二个按钮时,它必须打印“标签 2”。但它总是打印最后一个标签,'label 20'。

from tkinter import *
from tkinter import ttk

root = Tk()
for index,i in enumerate(range(0,20)):
    label = ttk.Label(root, text='line {}'.format(i+1))
    label.grid(row=index, column=0)
    button = ttk.Button(root, text='show info', command=lambda: print(label['text']))
    button.grid(row=index, column=1)

root.mainloop()

我该如何解决?

谢谢

【问题讨论】:

标签: python-3.x button tkinter


【解决方案1】:

循环中定义的 lambda 函数只有一个外部作用域。因此,所有 lambda 实例都引用范围内变量的最后一个值。它可以通过将当前值作为参数绑定到 lambda 来解决(这会引入 lambda 级别范围!),因此每个 lambda 都会获得不同的输入,

from tkinter import *
from tkinter import ttk

root = Tk()
for index,i in enumerate(range(0,20)):
    label = ttk.Label(root, text='line {}'.format(i+1))
    label.grid(row=index, column=0)
    button = ttk.Button(root, text='show info', command=lambda lb=label: print(lb['text']))
    button.grid(row=index, column=1)

root.mainloop()

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2014-07-24
    相关资源
    最近更新 更多