如何限制Tkinter网格布局中LabelFrame的尺寸比例保持固定
问题原因
你已经正确设置了两列的weight=1,但tkinter的grid布局中weight仅用于分配剩余额外空间,如果某一列内部的控件(比如加载后的PDF图片)本身尺寸更大,会优先撑开列宽,导致两列比例失衡。
解决方案
只需要给承载两个LabelFrame的父容器的两列设置uniform参数,将它们归到同一个等宽分配组即可,tkinter会强制该组内的所有列保持相同宽度。
找到你的init_frame方法中对self.frame的列配置部分,修改为:
def init_frame(self): self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.frame = Frame(self) self.frame.rowconfigure(0, weight=1) # 增加uniform参数,同组列强制等宽 self.frame.columnconfigure(0, weight=1, uniform="equal_col") self.frame.columnconfigure(1, weight=1, uniform="equal_col") self.frame.grid(column=0, row=0, sticky='news', padx=10, pady=10) self.init_pdf_frame() self.init_ocr_frame()
uniform的取值可以自定义,只要两个列的取值相同就会被归到同一组,自动平分父容器的可用宽度,不受内部内容大小影响,调整窗口大小时也会始终保持1:1的比例。
可选优化
你当前的clear_file方法会重复创建PDF区域的控件,长期使用可能会有控件冗余问题,可以改成直接清除图片即可:
def clear_file(self): self.pdf_frame.configure(image='', text="PDF result appears here") self.pdf_frame.image = None
效果展示
修改后加载PDF不会再出现PDF区域挤占OCR区域的问题,两个LabelFrame会始终平分窗口宽度:
- 加载前界面

- 加载后界面

内容的提问来源于stack exchange,提问作者rish_hyun
相关产品推荐
相关产品推荐

