CustomTkinter框架布局异常:第三个框架超出窗口范围求助
解决CustomTkinter框架超出窗口范围的问题
问题分析
你创建的第三个框架(start_options_frame)超出窗口,核心原因是grid布局的列未设置权重分配,且框架仅靠左对齐,当窗口宽度不足以容纳两个250px的框架时,就会出现溢出。
修复方案
1. 为主窗口的列设置权重
在创建框架前,给self.cpanels_window_create的列0和列1添加权重,让两列自动分配窗口宽度:
self.cpanels_window_create.grid_columnconfigure(0, weight=1) self.cpanels_window_create.grid_columnconfigure(1, weight=1)
2. 调整框架的sticky参数
将框架的sticky改为'nsew',让框架填充所在单元格空间,避免固定宽度导致溢出:
self.cpanel_options_frame.grid(row=3, column=0, sticky='nsew', padx=5, pady=5) self.start_options_frame.grid(row=3, column=1, sticky='nsew', padx=5, pady=5)
3. 可选:让窗口自动适配内容
如果希望窗口自动调整大小容纳所有元素,可在布局完成后添加:
self.cpanels_window_create.update_idletasks() self.cpanels_window_create.geometry(f"{self.cpanels_window_create.winfo_reqwidth()}x{self.cpanels_window_create.winfo_reqheight()}")
修改后的完整代码
def cpanel_options_frameandlabel(self): # 为主窗口的列设置权重,分配空间 self.cpanels_window_create.grid_columnconfigure(0, weight=1) self.cpanels_window_create.grid_columnconfigure(1, weight=1) self.whm_options_frame = CTkFrame( master=self.cpanels_window_create, width=90, height=20, fg_color='#FF0033' ) self.whm_options_frame.grid( row=2, column=0, padx=5, pady=5 ) self.cpanel_options_frame = CTkFrame( master=self.cpanels_window_create, width=250, height=250, corner_radius=1, border_width=0, fg_color='#FF0033' ) self.cpanel_options_frame.grid( row=3, column=0, sticky='nsew', padx=5, pady=5 ) self.start_options_frame = CTkFrame( master=self.cpanels_window_create, width=250, height=250, border_width=0, corner_radius=1, fg_color='#FF0033' ) self.start_options_frame.grid( row=3, column=1, sticky='nsew', padx=5, pady=5 ) # 可选:让窗口自动适配内容大小 self.cpanels_window_create.update_idletasks() self.cpanels_window_create.geometry(f"{self.cpanels_window_create.winfo_reqwidth()}x{self.cpanels_window_create.winfo_reqheight()}")
额外说明
- 添加
padx和pady可让框架之间保留间距,避免拥挤。 - 如果需要固定框架宽度,可给列设置
minsize=250,确保列不会小于框架最小宽度:self.cpanels_window_create.grid_columnconfigure(0, weight=1, minsize=250) self.cpanels_window_create.grid_columnconfigure(1, weight=1, minsize=250)
内容的提问来源于stack exchange,提问作者Yoser Moky
相关产品推荐
相关产品推荐

