You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:50:34