如何实现scrolledtext随窗口尺寸自适应?绑定Configure事件卡顿
解决Tkinter ScrolledText组件自适应窗口尺寸且无卡顿的问题
问题说明
需要实现ScrolledText组件随窗口大小变化自适应调整尺寸,原代码尝试用win.bind("<Configure>", function)实现时出现界面卡顿问题。
修复后的完整代码
# import GUI import tkinter as tk from tkinter import ttk from tkinter import scrolledtext # 创建窗口实例 win = tk.Tk() # 设置窗口标题 win.title("Notepad ver.1.0") # 允许窗口缩放 win.resizable(True, True) # 初始窗口尺寸 win.geometry("1900x1000") # 配置主窗口网格权重:让第0列、第7行在窗口缩放时自动分配额外空间 win.grid_columnconfigure(0, weight=1) win.grid_rowconfigure(7, weight=1) # frame1:顶部标签容器 frame1 = ttk.LabelFrame(win, text='') frame1.grid(column=0, row=0, sticky=tk.W) # 保持靠左,不随窗口拉伸 ttk.Label(frame1, text='Hello World').grid(column=0, row=0) # frame2:编辑区域容器 frame2 = ttk.LabelFrame(win, text='') # 让frame2填满所在网格单元格,同时配置内部网格权重 frame2.grid(column=0, row=7, sticky=tk.NSEW) frame2.grid_columnconfigure(0, weight=1) frame2.grid_rowconfigure(0, weight=1) # ScrolledText编辑组件 scr = scrolledtext.ScrolledText(frame2, wrap=tk.WORD) # 让组件填满frame2的网格单元格,添加少量内边距提升美观度 scr.grid(column=0, row=0, sticky=tk.NSEW, padx=5, pady=5) scr.config(font=('Arial', 10)) # 启动GUI循环 win.mainloop()
关键修改说明
- 主窗口网格配置:给主窗口的第0列和第7行设置
weight=1,确保窗口缩放时,对应列、行能自动分配新增的空间 - frame2布局优化:移除固定的
ipadx/ipady参数,设置sticky=tk.NSEW让容器填满所在网格,同时配置内部列、行权重,为ScrolledText预留拉伸空间 - ScrolledText布局调整:改用
grid布局并设置sticky=tk.NSEW,无需固定宽高,让组件随父容器自动拉伸 - 清理冗余设置:删除
grid_propagate(False),依靠Tkinter原生布局管理器的权重机制控制尺寸变化,避免手动干预引发的冲突
此方案无需绑定<Configure>事件,完全通过布局管理器自动处理尺寸适配,从根源避免了频繁触发事件导致的卡顿问题。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

