python—在循环中创建tkinter按钮,并为每个按钮设置命令以获取循环的索引

q5iwbnjs  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(444)

这个问题在这里已经有了答案

tkinter使用lambda在循环中分配按钮命令(1个答案)
昨天关门了。

def run_game(self):

        root = Tk()

        for i in range(0, 6):
            for j in range(0, len(self.board[i])):

                button = Button(root, text="0", height=2, width=10, command=lambda: self.if_clicked_square(i,j))
                button.place(x=25 + (100 * j), y=100 + (100 * i))

                # button.pack()
                self.buttonsList[i].append([button])

        root.mainloop()

上面的功能是使用tkinter创建一个包含28个按钮的gui板。我使用嵌套for循环创建每个按钮,并将其放置在板上和按钮列表中。为每个按钮设置命令时会出现问题。我想使用这个函数 if_clicked_square(i,j) 为了命令。该函数使用i和j索引进行操作。问题是循环完成后每个按钮的命令都是无效的 if_clicked_square(5,2) ,正好是循环的最后一个索引。我希望每个按钮都有一个基于for循环索引的唯一命令。例如,其中一个按钮应具有命令 if_clicked_square(0,0) ,一个人应该有这个命令 if_clicked_square(1,0) ,以此类推,适用于所有28个按钮。我能得到一些技巧来完成这个任务吗?

4jb9z9bj

4jb9z9bj1#

您需要在中创建一个局部变量 lambda 使用循环时

button = Button(root, text="0", height=2, width=10, command=lambda x_p=i,y_p=j: self.if_clicked_square(x_p,y_p))
button.place(x=25 + (100 * j), y=100 + (100 * i))

相关问题