使用pandastable实现列宽自适应内容时列宽过窄问题如何解决?
解决方案
你遇到的问题是三个配置问题共同导致的,按以下步骤修改代码即可实现按单元格内容自动适配列宽:
修改后的可运行代码
import tkinter as tk from pandastable import Table import pandas as pd root = tk.Tk() root.geometry("1500x1000") frame = tk.Frame(root) frame.pack(fill="both", expand=True) df = pd.DataFrame() df["column1"] = [1,2,32342323424342342324342332442323423234423423234999999] df["column2"] = ["a","b","c"] df["column3"] = ["a"*100]*3 # 移除固定width参数,允许表格适配父容器 pt = Table(frame, dataframe=df) pt.show() # 列宽调整放在show方法后执行,limit设为0表示不限制最大列宽 pt.adjustColumnWidths(limit=0) root.mainloop()
关键修改说明
- 初始化
Table时删除了固定width=300的参数,避免表格被限制初始宽度,无法利用窗口剩余空间 - 调整
adjustColumnWidths的调用时机到pt.show()之后:只有表格完成初始渲染后,才能正确识别每个单元格的内容长度,计算得到正确的适配列宽 - 将
limit参数改为0:该参数定义了每列允许的最大宽度,你之前设置的30会强制截断长内容的列宽,设为0即可取消最大限制,完全按照内容长度调整列宽
可选补充:窗口拉伸自动适配
如果需要窗口大小变化时自动重新调整列宽,可以额外添加事件绑定代码:
def resize_handle(event): pt.adjustColumnWidths(limit=0) root.bind("<Configure>", resize_handle)
内容的提问来源于stack exchange,提问作者Mazze
相关产品推荐
相关产品推荐

