Python 制作一个按钮';s命令导致按钮';s要插入到条目中的文本

Python 制作一个按钮';s命令导致按钮';s要插入到条目中的文本,python,tkinter,widget,Python,Tkinter,Widget,我正在创建一系列按钮,每个按钮都有不同的文本。我想,在点击一个按钮后,检索它对应的文本并将该文本插入一个条目中。我能得到的最好结果是: #!/usr/bin/env python import tkinter as tk from random import randint root= tk.Tk() entry= tk.Entry(root) def callback(): entry.insert(0, data) for i in range(20): data= st

我正在创建一系列按钮,每个按钮都有不同的文本。我想,在点击一个按钮后,检索它对应的文本并将该文本插入一个条目中。我能得到的最好结果是:

#!/usr/bin/env python
import tkinter as tk
from random import randint

root= tk.Tk()
entry= tk.Entry(root)
def callback():
    entry.insert(0, data)

for i in range(20):
    data= str(randint(0,100))
    button = tk.Button(root, text = data, command=callback).pack()
entry.pack()
root.mainloop()

这将导致条目设置为最后一个按钮的文本。

您应该做两件事:

  • 使您的
    回调
    函数接受一个将作为按钮文本的参数:

    def callback(text):
        entry.insert(0, text)
    
  • 将每个按钮的
    命令
    选项分配给将此文本发送到
    回调

    command=lambda data=data: callback(data)
    
  • 下面是完整代码的外观:

    import tkinter as tk
    from random import randint
    
    root= tk.Tk()
    entry= tk.Entry(root)
    def callback(text):
        entry.insert(0, text)
    
    for i in range(20):
        data= str(randint(0,100))
        tk.Button(root, text=data, command=lambda data=data: callback(data)).pack()
    entry.pack()
    root.mainloop()
    

    谢谢这真的很有帮助!我总是在谷歌搜索编程问题时遇到这个网站,但我找不到这个问题的答案,所以我想我会做一个账户,并对结果感到非常满意。我一定会更深入地了解“lambda”的功能。我以前见过,但从来没有理解过。很高兴能帮上忙!lambda也没什么特别的。它基本上是一个串联函数。您可以使用
    def func(data=data)获得相同的结果:回调(data)
    ,然后使用
    command=func
    。您需要使用
    data=data
    来为每次迭代捕获
    data
    的值。有关更多信息,请参见此处: