如何减少Tkinter创建网格与标签过程中的代码重复
Tkinter冗余代码优化方案
核心优化点
- 批量列配置:原来从第4列到第19列都需要设置最小宽度,直接用for循环批量处理,不用逐行写columnconfigure
- 表头标签批量生成:把所有表头的文本和对应列号整理成列表,循环创建Label并设置网格参数,公共样式统一配置不用重复写
- 结果标签批量生成:第1行第5到7列的空标签也可以用循环批量创建,存储到列表里后续调用更方便
优化后代码如下,保持原有功能不变的前提下,代码量减少近60%,后续调整组件配置只需要修改对应列表即可,维护成本更低:
import tkinter as tk # 创建主窗口 BLK_Window = tk.Tk() BLK_Window.title('Blackrock Primary Custom Baskets') BLK_Window.geometry('1280x720') BLK_Window.resizable(width=0, height=0) # 批量设置列最小宽度 for col in range(4, 20): BLK_Window.columnconfigure(col, minsize=50) # 左侧固定组件 tk.Label(text="1)").grid(row=0, column=0) tk.Label(text="Event Description").grid(row=0, column=1) A_E1 = tk.Entry(BLK_Window) A_E1.grid(row=0, column=2) tk.Label(text="EV Score").grid(row=1, column=1) A_E2 = tk.Entry(BLK_Window) A_E2.grid(row=1, column=2) tk.Button(text ="Check").grid(row=0, column=3) # 表头配置:(文本, 对应列号) header_config = [ ("Ticker",5), ("Shs",6), ("MV",7), ("Units",8), ("Cr/Re",9), ("AP/MM",10), ("Type",11), ("Feedback",12), ("OP Cutoff",13), ("LG Cutoff",14), ("BBG Ticker",15), ("Market Cap",16), ("Fund AUM",17), ("Min",18), ("Max",19) ] # 批量创建表头标签 for label_text, col in header_config: tk.Label( text=label_text, borderwidth=2, relief="groove" ).grid(row=0, column=col, sticky="ew") # 批量创建第1行结果标签,索引0对应列5,1对应列6,2对应列7 result_labels = [] for col in range(5, 8): lab = tk.Label(master=BLK_Window) lab.grid(row=1, column=col) result_labels.append(lab) # 计算函数 def sqr(): x1 = A_E2.get() x2 = float(x1)**2 # 批量给结果标签赋值 for lab in result_labels: lab["text"] = x2 A_B2 = tk.Button( master=BLK_Window, text="Text", command=sqr ) A_B2.grid(row=1, column=3, sticky="ew") BLK_Window.mainloop()
内容的提问来源于stack exchange,提问作者Dario Bani
相关产品推荐
相关产品推荐

