如何将Python Tkinter井字棋棋盘的重复按钮代码改写为循环?
优化井字棋按钮创建代码:用循环替代重复代码
嘿,我来帮你把这段冗余的tkinter按钮创建代码改成更简洁高效的循环实现!原来的写法重复了9次几乎一样的代码,不仅看起来繁琐,后续维护也麻烦。用循环+列表来管理按钮和对应的文本变量,既能减少冗余,还能让后续操作棋盘更方便。
修改后的完整代码
import tkinter as tk main = tk.Tk() # 初始化存储文本变量和按钮的二维列表 box_texts = [] buttons = [] # 嵌套循环生成3x3的按钮网格 for row in range(3): current_row_texts = [] current_row_buttons = [] for col in range(3): # 创建每个格子的文本变量 text_var = tk.StringVar() current_row_texts.append(text_var) # 创建按钮并布局 btn = tk.Button(main, textvariable=text_var, width=15, height=5) btn.grid(row=row, column=col) current_row_buttons.append(btn) # 将当前行的内容加入全局列表 box_texts.append(current_row_texts) buttons.append(current_row_buttons) main.mainloop()
关键说明
- 用两个二维列表
box_texts和buttons统一管理所有文本变量和按钮组件,后续操作某个格子时,直接通过索引定位就行——比如要给第一行第二列的格子设"X",就用box_texts[0][1].set("X"),比单独维护9个变量方便太多。 - 嵌套循环遍历行(0-2)和列(0-2),一次性完成所有按钮的创建与布局,彻底消除重复代码,代码量直接砍到原来的三分之一左右。
- 如果你需要对应原来的
box_text1到box_text9,只需要按行列索引对应:box_text1是box_texts[0][0],box_text5是box_texts[1][1],以此类推。
内容的提问来源于stack exchange,提问作者Susan Tandiono
相关产品推荐
相关产品推荐

