Tkinter如何为按钮触发显示的长文本添加正常生效的滚动条
Tkinter长文本展示滚动条失效修复
部分程序运行输出的文本内容过长,若不在弹出的显示窗口中添加滚动条,将无法完整查看全部内容。例如示例场景中,若当前目录下待返回展示的文件数量较多,窗口无法完整展示所有文本,因此需要配置滚动条,但原有代码中添加的滚动条无法按预期工作,可按以下方式修正。
原有代码核心问题
- 未导入
ttk模块,直接调用ttk.Scrollbar会触发名称错误 - 布局权重配置位置错误:原代码将行列权重配置在
Text控件上,实际需要配置在根窗口root上,才能保证控件随窗口自适应拉伸 - 内容写入对象错误:原代码获取到文件名列表后,将文本赋值给了
Label控件,而非绑定了滚动条的Text控件,滚动条自然无法响应内容长度变化 - 布局参数不全:
Text控件的sticky参数仅设置了EW(横向拉伸),缺少纵向拉伸配置,滚动条无法和文本区高度对齐
修正后完整代码
import os import tkinter as tk from tkinter import ttk def get_filenames(): filenames = sorted(os.listdir('.')) text_content = "\n".join(filenames) # 清空文本控件旧内容,写入新的文件名列表 text.delete(1.0, tk.END) text.insert(tk.END, text_content) root = tk.Tk() # 配置根窗口网格权重,保证控件随窗口缩放自适应 root.grid_columnconfigure(0, weight=1) root.grid_rowconfigure(0, weight=1) # 创建文本展示控件 text = tk.Text(root, height=10) text.grid(row=0, column=0, sticky=tk.NSEW) # 放置触发按钮 tk.Button(root, text="OK", command=get_filenames).grid(row=1, column=0, pady=5) # 创建垂直滚动条并绑定文本控件滚动命令 scrollbar = ttk.Scrollbar(root, orient='vertical', command=text.yview) scrollbar.grid(row=0, column=1, sticky=tk.NS) # 绑定文本控件滚动位置回传给滚动条 text['yscrollcommand'] = scrollbar.set root.mainloop()
修正效果
运行代码点击OK按钮后,所有当前目录下的文件名将写入文本控件,当内容高度超出文本控件可视区域时,滚动条会自动激活,拖动滚动条即可查看全部文本内容,窗口缩放时文本区和滚动条也会同步适配尺寸。
注:原代码中冗余的Label控件已移除,Label本身不支持与滚动条双向绑定,展示长文本直接使用Text控件即可。
内容的提问来源于stack exchange,提问作者user19318289
相关产品推荐
相关产品推荐

