def show_excel(self): # 清空文本框内容 self.result_text.delete(1.0, tk.END) self.result_text2.delete(1.0, tk.END) # 显示第一个表格 header = next(self.record_sheet.iter_rows(min_row=1, max_row=1, values_only=True)) print(header) # 创建表格 Frame 和滚动条 table_frame = tk.Frame(self.result_text) table_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) table_scroll_y = ttk.Scrollbar(table_frame, orient=tk.VERTICAL) table_scroll_y.pack(side=tk.RIGHT, fill=tk.Y) table_scroll_x = ttk.Scrollbar(table_frame, orient=tk.HORIZONTAL) table_scroll_x.pack(side=tk.BOTTOM, fill=tk.X) # 创建表格 table = ttk.Treeview(table_frame, columns=header, show='headings', yscrollcommand=table_scroll_y.set, xscrollcommand=table_scroll_x.set) table.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) table_scroll_y.config(command=table.yview) table_scroll_x.config(command=table.xview) # 设置表格列的标题和宽度 for col in header: table.heading(col, text=col) table.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 table.insert("", tk.END, values=row_values)這個代碼在運行第二遍時會再次創建一個Frame 怎麽解決
时间: 2024-03-23 12:39:51 浏览: 134
根据你提供的代码,每次调用 `show_excel` 方法时,都会创建一个名为 `table_frame` 的表格 Frame。这可能会导致多次调用 `show_excel` 方法时创建多个表格 Frame。
你可以通过在方法的开头检查表格 Frame 是否已经存在来解决问题。如果表格 Frame 已经存在,则可以直接使用它,否则就创建一个新的。
具体代码如下所示:
```python
def show_excel(self):
# 清空文本框内容
self.result_text.delete(1.0, tk.END)
self.result_text2.delete(1.0, tk.END)
# 检查表格 Frame 是否已经存在
if hasattr(self, "table_frame"):
table_frame = self.table_frame
table_frame.pack_forget() # 先隐藏表格 Frame
else:
# 创建新的表格 Frame
table_frame = tk.Frame(self.result_text)
self.table_frame = table_frame # 将表格 Frame 保存到实例变量中
table_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
# 其他代码不变
```
这样,如果表格 Frame 已经存在,就直接使用它,并将其从父容器中隐藏。否则,就创建一个新的表格 Frame,并将其保存到实例变量中。这样就可以避免重复创建 Frame 的问题。
阅读全文