Python Tkinter调整窗口大小时如何保持两个文本框尺寸一致
问题根源
你的代码中仅对group1容器的第0列设置了weight=1的缩放权重,第1列的权重默认值为0。窗口缩放时,只有权重非0的列会分配到额外的可用空间,因此放在第0列的第一个文本框会随窗口拉伸变宽,第1列的第二个文本框始终保持初始宽度,最终出现尺寸不一致的情况。
修复方案
给group1的两列设置完全相等的缩放权重,两列就会始终平分容器的水平可用空间,保证两个文本框宽度永远一致。
只需要在原有代码的group1.columnconfigure(0, weight=1)这一行下方,新增一行配置:
group1.columnconfigure(1, weight=1)
如果需要两个文本框之间保留合适的间距,可以在两个文本框的grid布局参数中增加水平边距配置,比如给第一个文本框加padx=(0,5),第二个加padx=(5,0),避免两个控件贴在一起。
修正后完整可运行代码
# coding: utf-8 try: import tkinter as tk from tkinter import scrolledtext except: # Python2兼容 import Tkinter as tk from Tkinter import scrolledtext def main(): master_window = tk.Tk() # 顶部按钮父容器 buttons_frame = tk.Frame(master_window) buttons_frame.grid(row=0, column=0, sticky=tk.W+tk.E) btn_Image = tk.Button(buttons_frame, text='Image') btn_Image.grid(row=0, column=0, padx=(10), pady=10) btn_File = tk.Button(buttons_frame, text='File') btn_File.grid(row=0, column=1, padx=(10), pady=10) btn_Folder = tk.Button(buttons_frame, text='Folder') btn_Folder.grid(row=0, column=2, padx=(10), pady=10) # 文本框分组容器 group1 = tk.LabelFrame(master_window, text="Text Box", padx=5, pady=5) group1.grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky=tk.E+tk.W+tk.N+tk.S) master_window.columnconfigure(0, weight=1) master_window.rowconfigure(1, weight=1) group1.rowconfigure(0, weight=1) group1.columnconfigure(0, weight=1) # 新增第1列权重配置,保证两列等比例缩放 group1.columnconfigure(1, weight=1) # 创建两个可滚动文本框 txtbox = scrolledtext.ScrolledText(group1, width=40, height=10) txtbox.grid(row=0, column=0, padx=(0,5), sticky=tk.E+tk.W+tk.N+tk.S) txtbox2 = scrolledtext.ScrolledText(group1, width=40, height=10) txtbox2.grid(row=0, column=1, padx=(5,0), sticky=tk.E+tk.W+tk.N+tk.S) master_window.mainloop() if __name__ == '__main__': main()
修改后无论怎么拖动调整窗口大小,两个文本框都会始终保持相同尺寸,同步缩放。
内容的提问来源于stack exchange,提问作者Geobongpapa
相关产品推荐
相关产品推荐

