# 创建表格用于显示第一个工作表 columns1 = next(self.record_sheet.iter_rows(min_row=1, max_row=1, values_only=True)) treeview1 = ttk.Treeview(self.container1, columns=columns1, show="headings", style="MyTreeview1.Treeview") vsb1 = ttk.Scrollbar(self.container1, orient="vertical", command=treeview1.yview) treeview1.configure(yscrollcommand=vsb1.set) treeview1.grid(row=1, column=3, rowspan=1, padx=5, pady=5, sticky="nsew") vsb1.grid(row=1, column=4, rowspan=1, padx=0, pady=5, sticky="ns") # 设置表格列的标题和宽度 for col in columns1: treeview1.heading(col, text=col) treeview1.column(col, width=80, anchor="center") # 显示第一个工作表的内容 for row in self.record_sheet.iter_rows(min_row=2, values_only=True): row_values = [str(cell) if cell is not None else "" for cell in row] if all(not bool(cell) for cell in row_values): continue treeview1.insert("", tk.END, values=row_values) # 创建表格用于显示第二个工作表 columns2 = next(self.data_sheet.iter_rows(min_row=1, max_row=1, values_only=True)) treeview2 = ttk.Treeview(self.container1, columns=columns2, show="headings", style="MyTreeview1.Treeview") vsb2 = ttk.Scrollbar(self.container1, orient="vertical", command=treeview2.yview) treeview2.configure(yscrollcommand=vsb2.set) treeview2.grid(row=5, column=3, rowspan=1, padx=5, pady=5, sticky="nsew") vsb2.grid(row=5, column=4, rowspan=1, padx=0, pady=5, sticky="ns") # 设置表格列的标题和宽度 for col in columns2: treeview2.heading(col, text=col) treeview2.column(col, width=80, anchor="center") # 显示第二个工作表的内容 for row in self.data_sheet.iter_rows(min_row=2, values_only=True): row_values = [str(cell) if cell is not None else "" for cell in row] if all(not bool(cell) for cell in row_values): continue treeview2.insert("", tk.END, values=row_values)將這段代碼中列標題修改為根據内容大小來改變列寬
时间: 2024-01-17 16:05:07 浏览: 137
可以使用`ttk.Sizegrip`和`treeview.column`中的`minwidth`和`stretch`属性来实现根据内容大小来改变列宽。具体步骤如下:
1. 在`treeview`右下角添加`ttk.Sizegrip`,以便用户可以手动调整列宽。
2. 在循环`columns`时,先将所有列的宽度设置为`1`,并将`minwidth`属性设置为`0`,这样`treeview`会根据内容自动调整列宽。
3. 在循环每一行数据时,获取每个单元格的内容并计算出该列的最大宽度。将该列的宽度设置为最大宽度,并将`minwidth`设置为该列的宽度,这样用户手动调整列宽时不能缩小列的宽度。
4. 将`stretch`属性设置为`False`,避免列宽随着`treeview`的宽度变化而改变。
修改后的代码如下:
```python
# 创建表格用于显示第一个工作表
columns1 = next(self.record_sheet.iter_rows(min_row=1, max_row=1, values_only=True))
treeview1 = ttk.Treeview(self.container1, columns=columns1, show="headings", style="MyTreeview1.Treeview")
vsb1 = ttk.Scrollbar(self.container1, orient="vertical", command=treeview1.yview)
treeview1.configure(yscrollcommand=vsb1.set)
treeview1.grid(row=1, column=3, rowspan=1, padx=5, pady=5, sticky="nsew")
vsb1.grid(row=1, column=4, rowspan=1, padx=0, pady=5, sticky="ns")
# 在treeview右下角添加Sizegrip
sizegrip1 = ttk.Sizegrip(self.container1)
sizegrip1.grid(row=2, column=4, sticky="se")
# 设置表格列的标题和宽度
for col in columns1:
treeview1.heading(col, text=col)
treeview1.column(col, width=1, minwidth=0, stretch=False, anchor="center")
# 显示第一个工作表的内容
for row in self.record_sheet.iter_rows(min_row=2, values_only=True):
row_values = [str(cell) if cell is not None else "" for cell in row]
if all(not bool(cell) for cell in row_values):
continue
for i, cell_value in enumerate(row_values):
cell_width = len(cell_value) * 8 # 根据内容计算单元格宽度
col_width = treeview1.column(columns1[i], width=None) # 获取当前列的宽度
if cell_width > col_width:
treeview1.column(columns1[i], width=cell_width, minwidth=cell_width) # 设置列宽和最小宽度
# 创建表格用于显示第二个工作表
columns2 = next(self.data_sheet.iter_rows(min_row=1, max_row=1, values_only=True))
treeview2 = ttk.Treeview(self.container1, columns=columns2, show="headings", style="MyTreeview1.Treeview")
vsb2 = ttk.Scrollbar(self.container1, orient="vertical", command=treeview2.yview)
treeview2.configure(yscrollcommand=vsb2.set)
treeview2.grid(row=5, column=3, rowspan=1, padx=5, pady=5, sticky="nsew")
vsb2.grid(row=5, column=4, rowspan=1, padx=0, pady=5, sticky="ns")
# 在treeview右下角添加Sizegrip
sizegrip2 = ttk.Sizegrip(self.container1)
sizegrip2.grid(row=6, column=4, sticky="se")
# 设置表格列的标题和宽度
for col in columns2:
treeview2.heading(col, text=col)
treeview2.column(col, width=1, minwidth=0, stretch=False, anchor="center")
# 显示第二个工作表的内容
for row in self.data_sheet.iter_rows(min_row=2, values_only=True):
row_values = [str(cell) if cell is not None else "" for cell in row]
if all(not bool(cell) for cell in row_values):
continue
for i, cell_value in enumerate(row_values):
cell_width = len(cell_value) * 8 # 根据内容计算单元格宽度
col_width = treeview2.column(columns2[i], width=None) # 获取当前列的宽度
if cell_width > col_width:
treeview2.column(columns2[i], width=cell_width, minwidth=cell_width) # 设置列宽和最小宽度
```
阅读全文