CustomTkinter grid布局问题:如何让stats_frame尺寸为下方两框两倍
解决CustomTkinter中grid布局框架尺寸比例问题
要实现蓝色框架(stats_frame)高度为下方黑色(control_frame)和白色(current_result_frame)框架的两倍,只需调整left_frame内的行权重配置:
- 修改
left_frame的行权重设置,将row0的权重设为2,row1和row2的权重设为1:
self.left_frame.rowconfigure(0, weight=2) self.left_frame.rowconfigure(1, weight=1) self.left_frame.rowconfigure(2, weight=1)
这样stats_frame会占据left_frame总高度的2/(2+1+1)=50%,另外两个框架各占25%,刚好满足"stats_frame高度是另外两个的两倍"的需求。
- 确保所有框架的
grid方法都设置了sticky='nesw'(你已经做到了这一点,这是让框架随单元格尺寸拉伸的关键)。
修改后的完整代码:
import customtkinter as ctk class Neural_Net_GUI(): def __init__(self): # 定义窗口 self.window = ctk.CTk() self.window.geometry('1200x800') self.window.columnconfigure(0, weight=3) self.window.columnconfigure(1, weight=1) self.window.rowconfigure(0, weight=1) self.window.rowconfigure(1, weight=10) # 示例框架 self.input_frame = ctk.CTkFrame(master=self.window, fg_color='green') self.input_frame.grid(row=0, column=0, columnspan=2, sticky='swne') self.graph_frame = ctk.CTkFrame(master=self.window, fg_color='red') self.graph_frame.grid(row=1, column=0, sticky='swne') self.left_frame = ctk.CTkFrame(master=self.window) self.left_frame.columnconfigure(0, weight=1) # 修正行权重,实现2:1:1的高度比例 self.left_frame.rowconfigure(0, weight=2) self.left_frame.rowconfigure(1, weight=1) self.left_frame.rowconfigure(2, weight=1) self.stats_frame = ctk.CTkFrame(master=self.left_frame, fg_color='blue') self.stats_frame.grid(row=0, column=0, sticky='nesw') self.control_frame = ctk.CTkFrame(master=self.left_frame, fg_color='black') self.control_frame.grid(row=1, column=0, sticky='nesw') self.current_result_frame = ctk.CTkFrame(master=self.left_frame, fg_color='white') self.current_result_frame.grid(row=2, column=0, sticky='nesw') self.left_frame.grid(row=1, column=1, sticky='swne') N = Neural_Net_GUI() N.window.mainloop()
原理说明:grid布局的行权重决定了额外空间的分配比例,当窗口尺寸变化时,单元格会按照权重比例分配可用空间。设置2:1:1的权重后,stats_frame所在的行会获得两倍于另外两行的空间,从而实现目标尺寸比例。
内容的提问来源于stack exchange,提问作者Adam Brestovansky
相关产品推荐
相关产品推荐

