gpt4 book ai didi

python - 我如何在 Tkinter 中每次访问不同的按钮?

转载 作者:行者123 更新时间:2023-11-28 22:08:36 27 4
gpt4 key购买 nike

我有九个这样创建的按钮:

MyButton1 = Button(game, text="BUTTON1", image=pixel, compound="c", width=200, height=200, command=callback(1))
MyButton1.grid(row=0, column=0)

MyButton2 = Button(game, text="BUTTON2", image=pixel, compound="c", width=200, height=200, command=callback(2))
MyButton2.grid(row=1, column=0)

MyButton3 = Button(game, text="BUTTON3", image=pixel, compound="c", width=200, height=200, command=callback(3))
MyButton3.grid(row=2, column=0)

# and so on

我想在单击特定按钮时更改它的文本,并且我知道 button.config 可用于更改按钮的某些内容。例如,如果我想更改 MyButton1 的文本,我可以这样做:MyButton1.config(text="X")。但是我认为为每个按钮的 command 设置不同的函数会很麻烦,所以我可以创建一个这样的函数:

def callback(id):
print(id)
# change the text of the button

但是,我的问题是,当我尝试获取的按钮每次都不同时,我不知道如何访问该按钮。我不能执行 "MyButton"+ str(id).config,原因很明显(它是一个字符串)。那么我应该怎么做呢?

最佳答案

使用按钮列表。您可以在 lambda 命令中引用索引。

通过使用列表来存储我们的按钮,我们可以引用它们的索引来执行我们需要的任何操作。这在动态处理小部件或大量小部件时非常有用。这样我们就可以构建一个简单的函数来获取列表的索引,以便编辑我们需要的内容。 Lambda 非常适合在循环中为每个按钮设置我们的命令。

重要的是要注意,您不能简单地执行 command= update_button(x),因为这将在创建按钮的实例时调用该函数,而不是等待您按下它。这是因为在命令中我们调用了函数而不是保存对它的引用。为了保存对函数的引用,我们只需像这样省略括号 command= update_button

在这种情况下,我们确实需要向它传递一个变量,因此为了做到这一点,我们可以为我们的命令编写一个名为 lambda 的无名函数来执行另一个命令,同时传递输出变量。

import tkinter as tk


def update_button(ndex):
button_list[ndex].config(text='x')


root = tk.Tk()

button_list = []
for i in range(9):
button_list.append(tk.Button(root, text='Button {}'.format(i), command=lambda x=i: update_button(x)))
button_list[-1].pack(fill='x')

root.mainloop()

按下几个按钮的结果应用程序:

enter image description here

这是一个使用网格和一些数学来处理列和行中的网格放置的示例。

import tkinter as tk


def update_button(ndex):
button_list[ndex].config(text='x')


root = tk.Tk()

button_list = []
row = 0
column = 0
for i in range(15):
button_list.append(tk.Button(root, text='Button {}'.format(i+1), command=lambda x=i: update_button(x)))
button_list[-1].grid(row=row, column=column, sticky='ew')
if row % 4 == 0 and row != 0:
column += 1
row = 0
else:
row += 1

root.mainloop()

结果:

enter image description here

如果您宁愿先运行列然后运行行,只需翻转数学:

if column % 4 == 0 and column != 0:
row += 1
column = 0
else:
column += 1

结果:

enter image description here

关于python - 我如何在 Tkinter 中每次访问不同的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382846/

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