diff --git a/ui.py b/ui.py index 5564529..b152e18 100644 --- a/ui.py +++ b/ui.py @@ -9,7 +9,7 @@ class GUI: def __init__(self): self.root = tk.Tk() self.root.title('图书查询系统') - self.root.geometry("600x400") + self.root.geometry("600x800") self.root.configure(bg='#f0f0f0') self.create_widgets() self.setup_layout() @@ -55,15 +55,26 @@ class GUI: bg='white', relief=tk.GROOVE, borderwidth=1) - self.result_label = tk.Label(self.result_frame, - text="查询结果将显示在这里...", - font=('微软雅黑', 10), - wraplength=500, - justify='left', - bg='white', - padx=10, - pady=10) + # 添加滚动条 + self.scrollbar = tk.Scrollbar(self.result_frame) + self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + # 使用Text组件替代Label以便支持滚动 + self.result_text = tk.Text(self.result_frame, + yscrollcommand=self.scrollbar.set, + font=('微软雅黑', 10), + wrap=tk.WORD, + bg='white', + padx=10, + pady=10) + self.result_text.pack(expand=True, fill='both') + self.scrollbar.config(command=self.result_text.yview) + + # 初始文本 + self.result_text.insert(tk.END, "查询结果将显示在这里...") + self.result_text.config(state=tk.DISABLED) # 设置为只读 + # 添加模糊搜索按钮 self.fuzzy_button = tk.Button(self.main_frame, text="模糊搜索", @@ -97,7 +108,8 @@ class GUI: # 按钮和结果区域 self.query_button.pack(pady=15) self.result_frame.pack(fill='both', expand=True, pady=(10,0)) - self.result_label.pack(expand=True, fill='both') + # 删除下面这行 + # self.result_label.pack(expand=True, fill='both') # 添加模糊搜索输入框和按钮布局 tk.Label(self.input_frame, @@ -111,7 +123,10 @@ class GUI: """处理模糊搜索按钮点击事件""" keyword = self.fuzzy_entry00.get().strip() if not keyword: - self.result_label.config(text="请输入搜索关键词") + self.result_text.config(state=tk.NORMAL) + self.result_text.delete(1.0, tk.END) + self.result_text.insert(tk.END, "请输入搜索关键词") + self.result_text.config(state=tk.DISABLED) return self.fuzzy_button.config(state=tk.DISABLED, text="搜索中...") @@ -119,16 +134,22 @@ class GUI: try: results = fuzzy_search_book(keyword) + self.result_text.config(state=tk.NORMAL) + self.result_text.delete(1.0, tk.END) if isinstance(results, str): - self.result_label.config(text=results) + self.result_text.insert(tk.END, results) else: formatted_results = "\n\n".join( "\n".join(f"{k}: {v}" for k, v in book.items()) for book in results ) - self.result_label.config(text=formatted_results) + self.result_text.insert(tk.END, formatted_results) + self.result_text.config(state=tk.DISABLED) except Exception as e: - self.result_label.config(text=f"搜索出错: {str(e)}") + self.result_text.config(state=tk.NORMAL) + self.result_text.delete(1.0, tk.END) + self.result_text.insert(tk.END, f"搜索出错: {str(e)}") + self.result_text.config(state=tk.DISABLED) finally: self.fuzzy_button.config(state=tk.NORMAL, text="模糊搜索") @@ -136,7 +157,10 @@ class GUI: """处理查询按钮点击事件""" isbn = self.entry00.get().strip() if not isbn: - self.result_label.config(text="请输入ISBN编号") + self.result_text.config(state=tk.NORMAL) + self.result_text.delete(1.0, tk.END) + self.result_text.insert(tk.END, "请输入ISBN编号") + self.result_text.config(state=tk.DISABLED) return # 禁用按钮防止重复点击 @@ -145,14 +169,20 @@ class GUI: try: result = query_isbn(isbn) + self.result_text.config(state=tk.NORMAL) + self.result_text.delete(1.0, tk.END) if isinstance(result, dict): formatted_result = "\n".join(f"{k}: {v}" for k, v in result.items()) - self.result_label.config(text=formatted_result) + self.result_text.insert(tk.END, formatted_result) else: - self.result_label.config(text=result) + self.result_text.insert(tk.END, result) + self.result_text.config(state=tk.DISABLED) except Exception as e: - self.result_label.config(text=f"查询出错: {str(e)}") + self.result_text.config(state=tk.NORMAL) + self.result_text.delete(1.0, tk.END) + self.result_text.insert(tk.END, f"查询出错: {str(e)}") + self.result_text.config(state=tk.DISABLED) finally: # 恢复按钮状态 self.query_button.config(state=tk.NORMAL, text="查询") @@ -160,52 +190,20 @@ class GUI: def display_results(self, results): """以表格形式显示查询结果""" # 清空原有内容 - for widget in self.result_frame.winfo_children(): - widget.destroy() + self.result_text.config(state=tk.NORMAL) + self.result_text.delete(1.0, tk.END) if isinstance(results, str) or (isinstance(results, list) and len(results) == 1 and isinstance(results[0], str)): # 处理错误信息 - tk.Label(self.result_frame, - text=results if isinstance(results, str) else results[0], - font=('微软雅黑', 10), - wraplength=500, - justify='left', - bg='white', - padx=10, - pady=10).pack(expand=True, fill='both') - return - - # 创建表格框架 - table_frame = tk.Frame(self.result_frame, bg='white') - table_frame.pack(expand=True, fill='both', padx=10, pady=10) - - # 获取表头 - headers = list(results[0].keys()) - - # 创建表头 - for col, header in enumerate(headers): - tk.Label(table_frame, - text=header, - font=('微软雅黑', 10, 'bold'), - bg='#f0f0f0', - relief=tk.GROOVE, - padx=5, - pady=5).grid(row=0, column=col, sticky='ew') - - # 填充表格内容 - for row_idx, book in enumerate(results, start=1): - for col_idx, (key, value) in enumerate(book.items()): - tk.Label(table_frame, - text=value, - font=('微软雅黑', 10), - bg='white', - relief=tk.GROOVE, - padx=5, - pady=5).grid(row=row_idx, column=col_idx, sticky='ew') - - # 设置列权重使表格均匀分布 - for col in range(len(headers)): - table_frame.grid_columnconfigure(col, weight=1) + self.result_text.insert(tk.END, results if isinstance(results, str) else results[0]) + else: + # 创建表格形式的文本 + for book in results: + for key, value in book.items(): + self.result_text.insert(tk.END, f"{key}: {value}\n") + self.result_text.insert(tk.END, "\n") + + self.result_text.config(state=tk.DISABLED) # 恢复为只读 if __name__ == '__main__': app = GUI()