[如何在按钮命令中设置变量以在创建多按钮的循环中拥有按钮的文本? [重复]

问题描述 投票:1回答:2
我有一个循环,在包含列表值的标签下创建一个按钮:

def feed_page(): feed = ["Cooking", "Sports", "Tv", "Fashion"] #let's say those are the list's values l = len(feed) - 1 x = 0 while l >=0: Label(app, text=feed[l]).grid(row=x, column=1) b = Button(app, text=feed[l]) b.configure(command=lambda: print_button_pressed_text(b.cget('text'))) b.grid(row=x+1, column=1) x += 2

*列表Feed的长度和值在每次调用函数feed_page()时都会改变。

我希望每次按下特定按钮时,print_button_pressed_text功能将打印出该特定按钮的文本。 (每个按钮都有自己的唯一编号)

def print_button_pressed_text(num): print num

但是,无论我按什么按钮,该功能都会打印值'Fashion'(列表中的最后一个值。)

您知道问题是什么吗?以及如何解决?

python button tkinter command
2个回答
1
投票
def print_button_pressed_text(num): def handler: return num; return handler;

UPD

问题是lambda函数查看错误的按钮,仅是最后一个,因为循环没有提供正确的作用域。

def make_button(text, row): b = Button(app, text=text) b.configure(command=lambda: print_button_pressed_text(b.cget('text'))) b.grid(row=x+1, column=1) return b while l >= 0: make_button(feed[l], x + 1) # ...

UPD2

为什么会发生?如果想进一步了解范围和闭包,请查看→https://louisabraham.github.io/articles/python-lambda-closures.html。>

0
投票
您不能使用联接功能吗?只需定义一个函数:
© www.soinside.com 2019 - 2024. All rights reserved.