如何使用Frame将Tkinter主窗口分割为类似IDE的左右分栏布局
tkinter 全屏分栏布局修复方案
你当前代码无法实现全屏分栏的核心问题是根窗口仅配置了列拉伸权重,未配置行拉伸权重,导致容器Frame无法垂直方向填满窗口,同时末尾存在无效代码会引发运行报错。
修正后的可运行代码如下:
from tkinter import * root = Tk() root.title('Text-Editor') root.resizable(width=True, height=True) root.geometry("1400x660") # 配置根窗口行列拉伸权重 root.columnconfigure(0, weight = 1) root.rowconfigure(0, weight = 1) my_frame = Frame(root) my_frame.grid(row=0, column=0, sticky="nswe") # 配置左右栏宽度比例为1:3,可自行调整权重值修改比例 my_frame.columnconfigure(0, weight=1) my_frame.columnconfigure(1, weight=3) my_frame.rowconfigure(0, weight=1) left_frame = Frame(my_frame, bg="#f5f5f5") left_frame.grid(row=0, column=0, sticky="nswe") left_frame.columnconfigure(0, weight=1) left_frame.rowconfigure(0, weight=1) right_frame = Frame(my_frame, bg="#ffffff") right_frame.grid(row=0, column=1, sticky="nswe") right_frame.columnconfigure(0, weight=1) right_frame.rowconfigure(0, weight=1) # 滚动条配置,后续绑定文本组件时补充yscrollcommand参数即可 scrollbar_object = Scrollbar(left_frame) scrollbar_object2 = Scrollbar(right_frame) scrollbar_object.grid(row=0, column=1, sticky='ns') scrollbar_object2.grid(row=0, column=1, sticky='ns') # 菜单栏配置 my_menu = Menu(root) root.config(menu=my_menu) root.mainloop()
核心修改点说明
- 新增
root.rowconfigure(0, weight = 1):给根窗口第0行设置拉伸权重,让容器Frame可以随窗口垂直拉伸填满空间 - 删除了末尾
root.config(menu=my_menu)后的无效冗余字符,避免程序运行报错 - 补全了缺失的tkinter导入语句和主循环
root.mainloop(),代码可直接运行测试 - 可选给左右Frame设置不同背景色,方便直观区分分栏边界,不需要可删除对应bg参数
如果你需要实现IDE中可拖拽调整分栏宽度的效果,可以直接用tkinter内置的PanedWindow组件替换当前的my_frame,无需手动配置列权重,还自带拖拽分隔条功能,示例代码:
# 可拖拽分栏实现示例 my_frame = PanedWindow(root, orient=HORIZONTAL, sashwidth=4, sashrelief=GROOVE) my_frame.grid(row=0, column=0, sticky="nswe") # 直接将左右子Frame添加到PanedWindow即可 my_frame.add(left_frame, width=350) # 可指定左栏默认宽度 my_frame.add(right_frame)
内容的提问来源于stack exchange,提问作者Prajwal Sridhar
相关产品推荐
相关产品推荐

