在Python的 Tkinter中,对按钮进行for循环,逐一处理每一个。

编程语言 2026-07-07

我有一个for循环用来创建按钮,但我无法单独访问每一个按钮。我尝试过使用列表,但无法把一个对象赋给一个字符串对象,这是我得到的错误。另一个尝试是字典,但输出很怪,根本不像变量名。此外,它们是在运行时创建的,因此在编写程序时尝试访问它们以分配命令会报错,因为变量名尚未确定(只在运行时才确定)。

def check_row_score_entry(button_name):
    print(button_name)

for i in range (1, 14):
    for j in range (1, 5):
        button_names_store = {}
        button_name = f'button_kniffel_{i}_{j}'
        button_names_store[button_name] = tk.Button(
            top_middle_frame,
            bg="orange",
            height=1,
            width=12,
            command= lambda: check_row_score_entry
        )
        button_names_store[button_name].grid(row=i, column=j)
        print(button_names_store[button_name])

我可以这样做吗(每个按钮都分配一个分数的命令),还是必须逐个创建每个按钮?我还没有看到打印出的名称。

解决方案

思路是生成一个新的类,并将for循环的行和列的迭代作为参数传入,如下所示:

import tkinter as tk

class Cell:
    def __init__(self, x, y):
        self.cell_button_object = None
        self.x = x
        self.y = y

    def create_button_object(self, location):
        button_score = tk.Button(
            location,
            text=f"{self.x} : {self.y}",
            bg="orange",
            height=1,
            width=12,
        )
        button_score.bind("<Button-1>", self.left_click_action)
        self.cell_button_object = button_score

    def left_click_action(self, event):
        print(event)
        print(f"left click action")

并在根窗口中像这样使用它:

    for i in range (1, 14):
        for j in range (1, 5):
            button_cell = Cell(i, j)
            button_cell.create_button_object(top_middle_frame)
            button_cell.cell_button_object.grid(row=i, column=j)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章