每次在Tkinter中如何访问一个不同的按钮?

威廉·琼斯

我创建了九个按钮,如下所示:

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由于明显的原因,我不能这样做(这是一个字符串)。那我该怎么做呢?

迈克-SMT

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

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

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

也就是说,在这种情况下,我们确实需要向其传递变量,因此,为了执行此操作,我们可以在命令中编写一个名为a的无名函数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()

结果应用程序,其中已按下几个按钮:

在此处输入图片说明

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

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()

结果:

在此处输入图片说明

如果您希望先运行列,然后运行行,则只需翻转数学即可:

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

结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建一个循环来在每次按下按钮时指定不同的动作?

如何获得一个UI按钮,使其在每次按下时执行不同的任务?

如何创建一个回复按钮,每次单击一个按钮时显示

如何在Python中每次对同一个变量获取不同的随机数?

Python tkinter:如何确保在单击时仅创建一个子窗口,而不在每次单击按钮时创建一个新窗口?

每次快速调用一个函数时,如何自动添加一个新按钮?

swift 4 标签,每次我点击按钮时,标签都会显示一个不同的词

每次在tkinter中按下按钮时,如何获得不同的标签值?

如何从闪亮DT中的单选按钮(由JS回调制成)访问用户输入,并在一个DT中使用不同的JS元素?

如何更改 tkinter 窗口(标题栏中的一个)的“x”按钮的功能?

如何更改另一个类中单击的按钮的文本?(Python-tkinter)

如何将多个按钮链接到 tkinter 中的一个文本小部件?

如何在tkinter中仅选择一个单选按钮

如何使用 Python 3.6 在 tkinter 中制作一个瞬时按钮

在 Python 中按下按钮(tkinter)时如何执行另一个文件?

在tkinter中,如何访问在另一个窗口中创建的变量?

如何让 tkinter 按钮只打开一个顶层?

如何在 Python 中将不同类中的对象访问到一个类中?

每次在 Python 中输入相同的响应时,如何循环到另一个不同的输入命令?

如何使用Codeigniter中的按钮访问或转到另一个页面

Android Studio。如何在OnClick方法中访问另一个按钮?

我如何获得一个 HTML 按钮以转到我自己页面中的不同页面?

如何在一个按钮中执行2种不同的动作?

如何连续从列表中多次生成一个随机项目,但是每次生成一个不同的项目时

Redux和一个Reduce中的Reduce访问不同的Reduce,如何?

从Android中的另一个类访问按钮

从Tkinter中的一个按钮在一个输入框中的多个条目

在同一个按钮中添加不同的图像

是否可以分解一个 numpy 数组以在每次迭代中运行 1 个不同的值?