如何使用customtkinter的grid()方法使框架Y轴不居中
解决CustomTkinter中grid()定位Y轴位置无效的问题
你当前的代码里,optFrame默认会紧贴所在grid单元格的顶部,所以无法到达目标Y轴位置。结合你窗口固定尺寸的情况,有两种简单的解决方式:
方法一:直接设置垂直边距(适合固定窗口尺寸)
计算目标垂直偏移量,在grid()中添加pady参数:
窗口高度750,框架高度100,垂直居中的偏移量为 (750-100)//2 = 325,修改后的代码如下:
import customtkinter as ctk # 主题设置 ctk.set_default_color_theme("minimalistTheme.json") # 主窗口 timedoro = ctk.CTk() timedoro.geometry("1500x750") timedoro.title("Time-Doro!") timedoro.iconbitmap("tdicon.ico") timedoro.resizable(False, False) # 选项框架 optFrame = ctk.CTkFrame(timedoro, width=100, height=100, corner_radius=6) # 添加pady参数设置垂直偏移,让框架垂直居中 optFrame.grid(row=0, column=1, padx=25, pady=325) # 主循环 timedoro.mainloop()
方法二:通过grid行配置实现灵活对齐(适合窗口可调整的情况)
先让grid的行占据整个窗口垂直空间,再控制框架在单元格内的对齐方式,同时禁止框架自动调整尺寸:
import customtkinter as ctk # 主题设置 ctk.set_default_color_theme("minimalistTheme.json") # 主窗口 timedoro = ctk.CTk() timedoro.geometry("1500x750") timedoro.title("Time-Doro!") timedoro.iconbitmap("tdicon.ico") timedoro.resizable(False, False) # 配置第0行占据全部垂直空间 timedoro.grid_rowconfigure(0, weight=1) # 选项框架,禁止自动调整尺寸 optFrame = ctk.CTkFrame(timedoro, width=100, height=100, corner_radius=6) optFrame.grid_propagate(False) # 让框架在单元格内垂直居中(通过上下边距自动填充) optFrame.grid(row=0, column=1, padx=25, sticky="") # 主循环 timedoro.mainloop()
关键说明
grid_propagate(False):禁止框架根据内部组件自动调整尺寸,保证你设置的width和height生效。grid_rowconfigure(0, weight=1):让第0行的垂直空间随窗口大小拉伸,确保单元格高度覆盖整个窗口。
内容的提问来源于stack exchange,提问作者KiddLeVert
相关产品推荐
相关产品推荐

