在Python的 Tkinter中,对按钮进行for循环,逐一处理每一个。
我有一个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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。