如何在Python的Tkinter中创建居中的成绩输入网格
如何用Tkinter创建居中的成绩册网格布局?
嘿,我来帮你把这个成绩册界面改得更专业!你原来用place()布局手动定位控件不仅麻烦,还很难做出整齐居中的网格效果。换成Tkinter的grid()布局就轻松多了,它天生就是用来做这种行列对齐的界面的。
下面是改造后的完整代码,实现了居中显示的网格成绩册,每个月份和类别对应一个输入框:
import tkinter as tk # 主窗口基础设置 window8 = tk.Tk() window8.title('Grades') window8.geometry('1000x600') # 可以根据需求调整窗口大小,也可以后续改成自适应 # 让窗口启动时自动居中 window8.update_idletasks() win_width = window8.winfo_width() win_height = window8.winfo_height() screen_width = window8.winfo_screenwidth() screen_height = window8.winfo_screenheight() x_pos = (screen_width // 2) - (win_width // 2) y_pos = (screen_height // 2) - (win_height // 2) window8.geometry(f'{win_width}x{win_height}+{x_pos}+{y_pos}') # 统一管理月份和类别数据,后续修改更方便 months = ['9', '10', '11', '12', '1', '2', '3', '4', '5', '6'] categories = ['Category1', 'Category2', 'Category3'] # 创建表头:第一行显示月份 # 第一列留空放"Categories"标签 tk.Label(window8, text='Categories', font=('Arial', 10, 'bold')).grid(row=0, column=0, padx=15, pady=10, sticky='w') for col_idx, month in enumerate(months, start=1): tk.Label(window8, text=month, font=('Arial', 10, 'bold')).grid(row=0, column=col_idx, padx=15, pady=10) # 创建类别列和对应的输入框网格 for row_idx, category in enumerate(categories, start=1): # 左侧的类别标签 tk.Label(window8, text=category).grid(row=row_idx, column=0, padx=15, pady=10, sticky='w') # 每个类别对应的月份输入框 for col_idx, month in enumerate(months, start=1): grade_entry = tk.Entry(window8, width=5) grade_entry.grid(row=row_idx, column=col_idx, padx=15, pady=10) window8.mainloop()
关键改动说明:
- 用列表管理数据:把月份和类别放进列表里,后续要添加/删除类别或月份,只需要修改列表,不用重复写控件代码,维护起来超方便。
- 窗口自动居中:通过获取屏幕和窗口的尺寸,计算出居中坐标,让界面打开时就显示在屏幕中央,更符合用户习惯。
grid()布局的妙用:- 用
row和column参数直接指定控件的行列位置,自动帮你对齐所有控件,不用手动算x/y坐标。 padx和pady设置控件间的间距,让界面不拥挤,更美观。sticky='w'让类别标签左对齐,和输入框的位置更协调。
- 用
- 动态生成输入框:通过嵌套循环,自动为每个类别+月份的组合创建输入框,完美对应成绩册的需求。
内容的提问来源于stack exchange,提问作者Fel
相关产品推荐
相关产品推荐

