def show_excel(self):query_entry = tk.Entry(self.container1) query_entry.pack(side=tk.LEFT, padx=5, pady=5) query_button = tk.Button(self.container1, text='查询', command=lambda: self.query_data(query_entry.get(), table2)) query_button.pack(side=tk.LEFT, padx=5, pady=5) def on_return_key(event): query_button.invoke() query_entry.bind('<Return>', on_return_key) def query_data(self, query_str, table): # 清空表格内容 table.delete(*table.get_children()) # 获取查询条件 query_col = 8 # 遍历表格数据,找到符合条件的数据 for row in self.data_sheet.iter_rows(min_row=2, values_only=True): if str(row[query_col - 1]).startswith(query_str): row_values = [str(cell) if cell is not None else "" for cell in row] table.insert("", tk.END, values=row_values)每運行一次就新建一個輸入框和按鈕怎麽解決
时间: 2024-03-23 22:42:28 浏览: 60
这个问题可以通过将创建 Entry 和 Button 的代码放在初始化方法中,并把它们作为实例变量保存起来来解决。这样每次调用 `show_excel` 方法时,就不会重新创建新的组件了。具体实现可以参考下面的代码:
```
def __init__(self, parent):
self.parent = parent
self.query_entry = tk.Entry(self.container1)
self.query_entry.pack(side=tk.LEFT, padx=5, pady=5)
self.query_entry.bind('<Return>', self.on_return_key)
self.query_button = tk.Button(self.container1, text='查询', command=lambda: self.query_data(self.query_entry.get(), table2))
self.query_button.pack(side=tk.LEFT, padx=5, pady=5)
def show_excel(self):
pass # 其他代码略
def on_return_key(self, event):
self.query_button.invoke()
def query_data(self, query_str, table):
# 清空表格内容
table.delete(*table.get_children())
# 获取查询条件
query_col = 8
# 遍历表格数据,找到符合条件的数据
for row in self.data_sheet.iter_rows(min_row=2, values_only=True):
if str(row[query_col - 1]).startswith(query_str):
row_values = [str(cell) if cell is not None else "" for cell in row]
table.insert("", tk.END, values=row_values)
```
这样,每次调用 `show_excel` 方法时,就不会创建新的 Entry 和 Button 了,而是直接使用已有的实例变量。
阅读全文