# 配置 Treeview 的单元格样式 style_1.configure('Treeview.Cell', anchor='center')
时间: 2023-12-31 18:06:29 浏览: 55
`style_1.configure('Treeview.Cell', anchor='center')` 这行代码可以用于配置 `Treeview` 控件的单元格样式。其中,`style_1` 是 `ttk.Style` 类的一个实例,可以使用该实例来配置 `Treeview` 控件的样式。
在上面的代码中,我们使用了 `configure` 方法来配置名为 `'Treeview.Cell'` 的样式,将单元格中的文本水平居中显示。`anchor` 参数用于设置文本的对齐方式,取值可以为 `'center'`、`'w'`、`'e'` 等,分别表示居中、左对齐、右对齐等。
如果你想要设置单元格的字体、颜色等其他样式,可以在 `configure` 方法中添加相应的参数。例如,下面的代码设置了单元格的字体为 `'Arial'`,字体大小为 `12`,字体颜色为红色:
```python
style_1.configure('Treeview.Cell', font=('Arial', 12), foreground='red', anchor='center')
```
这样,你就可以根据自己的需求来配置 `Treeview` 控件的单元格样式了。
相关问题
def show_excel(self): style = ttk.Style() style.configure("MyTreeview1.Treeview", rowheight=25, borderwidth=2, relief="solid", font=('Arial', 10)) style.configure("MyTreeview1.Treeview.Heading", font=('Arial', 10, 'bold')) style.layout("MyTreeview1.Treeview", [('MyTreeview1.Treeview.treearea', {'sticky': 'nswe'})]) # 创建表格用于显示第一个工作表 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") treeview1.grid(row=1, column=3, rowspan=1, padx=5, pady=5, sticky="nsew") # 设置表格列的标题和宽度 for col in columns1: treeview1.heading(col, text=col) treeview1.column(col, width=100, anchor="center") # 显示第一个工作表的内容 for row in self.record_sheet.iter_rows(min_row=2, values_only=True): row_values = [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") treeview2.grid(row=3, column=3, padx=5, pady=5, sticky="nsew") # 设置表格列的标题和宽度 for col in columns2: treeview2.heading(col, text=col) treeview2.column(col, width=100, anchor="center") # 显示第二个工作表的内容 for row in self.data_sheet.iter_rows(min_row=2, values_only=True): row_values = [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)改這個代碼顯示excel數據時不要將excel中公式顯示出來,只顯示最後的結果,請修改出最後完整代碼
你可以使用 openpyxl 库中的 value 属性来获取单元格的值,而不是公式。
下面是修改后的代码:
```python
def show_excel(self):
style = ttk.Style()
style.configure("MyTreeview1.Treeview", rowheight=25, borderwidth=2, relief="solid", font=('Arial', 10))
style.configure("MyTreeview1.Treeview.Heading", font=('Arial', 10, 'bold'))
style.layout("MyTreeview1.Treeview", [('MyTreeview1.Treeview.treearea', {'sticky': 'nswe'})])
# 创建表格用于显示第一个工作表
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")
treeview1.grid(row=1, column=3, rowspan=1, padx=5, pady=5, sticky="nsew")
# 设置表格列的标题和宽度
for col in columns1:
treeview1.heading(col, text=col)
treeview1.column(col, width=100, anchor="center")
# 显示第一个工作表的内容
for row in self.record_sheet.iter_rows(min_row=2, values_only=True):
row_values = []
for cell in row:
if cell is None:
row_values.append("")
elif cell.data_type == 'f':
row_values.append(cell.value)
else:
row_values.append(cell.value)
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")
treeview2.grid(row=3, column=3, padx=5, pady=5, sticky="nsew")
# 设置表格列的标题和宽度
for col in columns2:
treeview2.heading(col, text=col)
treeview2.column(col, width=100, anchor="center")
# 显示第二个工作表的内容
for row in self.data_sheet.iter_rows(min_row=2, values_only=True):
row_values = []
for cell in row:
if cell is None:
row_values.append("")
elif cell.data_type == 'f':
row_values.append(cell.value)
else:
row_values.append(cell.value)
if all(not bool(cell) for cell in row_values):
continue
treeview2.insert("", tk.END, values=row_values)
```
在这个修改后的代码中,对于公式单元格,我们将 cell.value 添加到 row_values 列表中,而不是 cell。对于其他类型的单元格,我们仍然使用 cell.value。
# 创建表格用于显示第一个工作表 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)將這段代碼中列標題修改為根據内容大小來改變列寬
可以使用`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) # 设置列宽和最小宽度
```