为了账号安全,请及时绑定邮箱和手机立即绑定

如何从动态创建的按钮中获取文本?

如何从动态创建的按钮中获取文本?

凤凰求蛊 2022-01-05 11:08:43
我想要我的按钮,当我点击它们时返回它们的文本属性。我使用了 for 循环来动态创建按钮,但是当我这样做时, btn 变量卡在最后创建的按钮上,这意味着每个按钮都返回相同的文本值。listWords = ("Car","Train","Bus","Bike")var = 0def 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 个按钮:按钮 图像但是,无论我按什么按钮 btn['text'] 都会返回 Bike。我希望输出是按钮本身的输出,例如当我单击汽车时,我希望 btn['text'] 返回汽车。
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

您可以使用lambdaincommand=用参数分配函数 - 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)assing 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()


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信