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

编程入门 行业动态 更新时间:2024-10-24 13:20:10
本文介绍了如何从动态创建的按钮中获取文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我希望我的按钮在我点击它们时返回它们的文本属性.

I want my buttons when i click on them to return the text attribute of them.

我使用了 for 循环来动态创建按钮,但是当我这样做时,btn 变量卡在最后创建的按钮上,这意味着每个按钮都返回相同的文本值.

I've used a for loop to dynamically create the buttons but when i do this the btn variable gets stuck on the last created button meaning every button returns the same text value.

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 个按钮:按钮图片

This code produces 4 buttons: Image of buttons

但是无论我按什么按钮 btn['text'] 都将返回 Bike.我希望输出是按钮本身的输出,例如当我单击汽车时,我希望 btn['text'] 返回汽车.

However no matter what button i press btn['text'] will always return Bike. I want the output to be that of the button itself for example when i click car i want btn['text'] to return car.

推荐答案

您可以在 command= 中使用 lambda 来分配带参数的函数 - word - 并且函数必须得到这个参数 - def get_text(text)

You can use lambda in command= to assign function with argument - word - and function has to get this argument - 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()

您可以发送 btn 代替 word 函数,这样您就可以从按钮获取文本,也可以更改按钮上的文本或更改其颜色等.

Instead of word you can send btn to function so you can get text from button but also change text on button or change its color, etc.

但它需要一点不同的方法

But it need little different method

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) 将点击分配给 Button 或其他 Windget,它将运行带有参数 event 的函数它可以访问点击的小部件 - event.widget

You can also use bind('<Button-1>', callback) to assing click to Button or other Windget and it will run function with argument event which gives access to clicked widget - 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()

这篇关于如何从动态创建的按钮中获取文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-04-30 06:06:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1390597.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按钮   文本   动态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!