Grid布局下左侧框架小于右侧的原因及等宽实现方案
解决Grid布局中左右框架宽度不一致的问题
你的问题出在Grid列的宽度分配逻辑上:虽然你给窗口的第0、1列都设置了weight=1,但当列内控件的内容宽度存在差异时,Grid会优先根据内容撑开列宽,导致左右框架宽度不等。
要让左右框架宽度严格一致,只需给这两列添加**uniform参数**,将它们归入同一个均匀分组,强制两列保持相同的宽度比例:
import customtkinter as ctk class SettingsWindow(ctk.CTk): def __init__(self): super().__init__() self.title('Einstellungen') self.geometry('1000x750+10+10') self.grid_rowconfigure(0, weight=1) self.grid_rowconfigure(1, weight=1) # 关键修改:添加uniform参数,让两列属于同一分组 self.grid_columnconfigure(0, weight=1, uniform="same_col") self.grid_columnconfigure(1, weight=1, uniform="same_col") self.frame_settings = ctk.CTkFrame(self, border_width=1, border_color='black') self.frame_settings.grid(row=0, column=0, sticky='nesw', padx=(5, 5), pady=(5, 5)) self.frame_settings.grid_columnconfigure(0, weight=1) self.label_settings = ctk.CTkLabel(self.frame_settings, bg_color='lightgrey', text='Einstellungen') self.label_settings.grid(row=0, column=0, columnspan=2, padx=(5, 5), pady=(5, 5)) self.frame_database_settings = ctk.CTkFrame(self, border_width=1, border_color='black') self.frame_database_settings.grid(row=0, column=1, sticky='nesw', padx=(5, 5), pady=(5, 5)) self.frame_database_settings.grid_columnconfigure(0, weight=1) self.label_database_settings = ctk.CTkLabel(self.frame_database_settings, bg_color='lightgrey', text='Datenbank-Einstellungen') self.label_database_settings.grid(row=0, column=0, columnspan=2, padx=(5, 5), pady=(5, 5)) self.frame_rules = ctk.CTkFrame(self, border_width=1, border_color='black') self.frame_rules.grid(row=1, column=0, columnspan=2, sticky='nesw', padx=(5, 5), pady=(5, 5)) self.frame_rules.grid_columnconfigure(0, weight=1) self.label_rules = ctk.CTkLabel(self.frame_rules, text='Regeln') self.label_rules.grid(row=0, column=0, columnspan=2, pady=(5, 5)) SettingsWindow().mainloop()
原理说明
uniform参数接受一个字符串作为分组标识,所有带有相同标识的列(或行)会强制按照weight的比例分配空间,且各自的最小/最大尺寸会同步,彻底避免内容差异导致的宽度不一致问题。
内容的提问来源于stack exchange,提问作者Schnieker
相关产品推荐
相关产品推荐

