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 13:42:33 浏览: 55
你可以考虑创建一个新的类,然后将 show_excel() 方法和 query_data() 方法放到这个类中,然后在这个类中创建一个变量来存储 query_entry 和 query_button,这样每次运行时就不会重复创建了。具体实现可以参考以下代码:
```
class ExcelQuery:
def __init__(self, container1, data_sheet):
self.container1 = container1
self.data_sheet = data_sheet
self.query_entry = tk.Entry(container1)
self.query_entry.pack(side=tk.LEFT, padx=5, pady=5)
self.query_button = tk.Button(container1, text='查询', command=lambda: self.query_data(self.query_entry.get(), table2))
self.query_button.pack(side=tk.LEFT, padx=5, pady=5)
self.query_entry.bind('<Return>', self.on_return_key)
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)
```
然后在你的主类或主函数中,创建一个 ExcelQuery 的实例即可:
```
excel_query = ExcelQuery(self.container1, self.data_sheet)
```
阅读全文