gpt4 book ai didi

python - 单击时如何获取按钮ID?

转载 作者:行者123 更新时间:2023-12-03 23:01:26 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Tkinter assign button command in loop with lambda

(1 个回答)


4年前关闭。




我不知道如何引用在 tkinter 中单击的按钮。

我的代码:

for file in files: 
btn = Button(root, text=file).pack()

现在例如50 个按钮是从作为源的文件生成的。
但是,当我单击任何按钮时,只会引用最后一个按钮,而不是我真正想要使用/单击的按钮。

在 JavaScript 中,我们使用 this引用我们真正点击的对象,但是我在 Python 中找不到任何解决方案。

最佳答案

这可以通过如下方式完成:

from tkinter import *

root = Tk()

files = [] #creates list to replace your actual inputs for troubleshooting purposes
btn = [] #creates list to store the buttons ins

for i in range(50): #this just popultes a list as a replacement for your actual inputs for troubleshooting purposes
files.append("Button"+str(i))

for i in range(len(files)): #this says for *counter* in *however many elements there are in the list files*
#the below line creates a button and stores it in an array we can call later, it will print the value of it's own text by referencing itself from the list that the buttons are stored in
btn.append(Button(root, text=files[i], command=lambda c=i: print(btn[c].cget("text"))))
btn[i].pack() #this packs the buttons

root.mainloop()

所以它的作用是创建一个按钮列表,每个按钮都有一个分配给它的命令,即 lambda c=i: print(btn[c].cget("text") .

让我们分解一下。
lambda使用,以便在调用命令之前不会执行以下代码。

我们声明 c=i使值 i这是元素在列表中的位置存储在一个临时和一次性变量 c 中,如果我们不这样做,那么按钮将始终引用列表中的最后一个按钮,因为这就是 i对应于列表的最后一次运行。
.cget("text")是用来获取属性 text的命令来自特定的 tkinter 元素。

以上组合将产生您想要的结果,其中每个按钮在按下后都会打印自己的名称,您可以使用类似的逻辑应用它来调用您需要的任何属性或事件。

关于python - 单击时如何获取按钮ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45728548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com