当我点击按钮时,我希望它们返回它们的text属性。
我使用了for循环来动态创建按钮,但是当我这样做时,btn变量会卡在最后创建的按钮上,这意味着每个按钮都返回相同的文本值。
listWords = ("Car","Train","Bus","Bike")
var = 0
def getdef():
print(btn['text'])
for word in listWords:
btn = Button(window, text=word,command=getdef)
btn.grid(column=var, row=0)
var = var + 1
此代码产生4个按钮: Image of buttons
无论我按什么按钮btn ['text']都将始终返回Bike。我希望输出是按钮本身的输出,例如当我单击car时,我希望btn ['text']返回car。
答案 0 :(得分:0)
您可以在lambda
中使用command=
为函数分配参数-word
-函数必须获取该参数-def get_text(text)
import tkinter as tk
def get_text(text):
print(text)
list_words = ("Car","Train","Bus","Bike")
var = 0
root = tk.Tk()
for word in list_words:
btn = tk.Button(root, text=word, command=lambda txt=word:get_text(txt))
btn.grid(column=var, row=0)
var += 1
root.mainloop()
您可以发送word
而不是btn
来运行功能,以便您可以从按钮获取文本,还可以更改按钮上的文本或更改其颜色等。
但是它需要一些不同的方法
import tkinter as tk
def get_widget(widget):
print(widget["text"])
widget["text"] = "DONE"
widget["bg"] = "green"
list_words = ("Car","Train","Bus","Bike")
var = 0
root = tk.Tk()
for word in list_words:
btn = tk.Button(root, text=word)
btn["command"] = lambda widget=btn:get_widget(widget)
btn.grid(column=var, row=0)
var += 1
root.mainloop()
您还可以使用bind('<Button-1>', callback)
来将click to Button或其他Windget关联起来,它将运行带有参数event
的函数,该函数可以访问被单击的小部件-event.widget
import tkinter as tk
def get_event(event):
print(event.widget["text"])
event.widget["text"] = "DONE"
event.widget["bg"] = "green"
list_words = ("Car","Train","Bus","Bike")
var = 0
root = tk.Tk()
for word in list_words:
btn = tk.Button(root, text=word)
btn.bind('<Button-1>', get_event)
btn.grid(column=var, row=0)
var += 1
root.mainloop()