如何用for循环等方式批量创建tkinter对象实现二分查找可视化?
解决方案
直接使用列表批量存储tkinter组件实例是最简洁安全的实现方式,不需要借助exec这类高风险的动态执行语句,修改后的完整代码如下:
import tkinter as tk # 可直接调整的配置常量 PILLAR_COUNT = 10 PILLAR_WIDTH = 100 START_Y = 500 class MainWindow(tk.Tk): def __init__(self): super().__init__() self.geometry("1000x600") self.resizable(False, False) self.title("Binary Search Algorithm") # 批量创建立柱存储到列表 self.pillars = [] for i in range(PILLAR_COUNT): pillar = tk.Label(self, text=f"I am pillar {i}", bg="grey") pillar.place(x=i * PILLAR_WIDTH, y=START_Y) self.pillars.append(pillar) if __name__ == "__main__": Display = MainWindow() Display.mainloop()
使用说明
- 后续需要操作第n个立柱时,直接访问
self.pillars[n]即可,和你原来逐一定义的self.pn使用逻辑完全一致 - 把立柱数量、宽度、摆放位置都抽成常量后,后续调整可视化参数不需要逐行修改代码,仅修改顶部常量值即可
- 如果确实需要保留
self.pn的属性名形式(不推荐,不如列表访问方便),可以用setattr在循环里给实例动态添加属性,示例如下:
for i in range(10): pillar = tk.Label(self, text=f"I am pillar {i}", bg="grey") pillar.place(x=i*100, y=500) setattr(self, f'p{i}', pillar)
内容的提问来源于stack exchange,提问作者Lauri Alanen
相关产品推荐
相关产品推荐

