Update ui.py

main
p2apfqmgs 3 months ago
parent 49839bce03
commit 6f011665a9

120
ui.py

@ -9,7 +9,7 @@ class GUI:
def __init__(self): def __init__(self):
self.root = tk.Tk() self.root = tk.Tk()
self.root.title('图书查询系统') self.root.title('图书查询系统')
self.root.geometry("600x400") self.root.geometry("600x800")
self.root.configure(bg='#f0f0f0') self.root.configure(bg='#f0f0f0')
self.create_widgets() self.create_widgets()
self.setup_layout() self.setup_layout()
@ -55,15 +55,26 @@ class GUI:
bg='white', bg='white',
relief=tk.GROOVE, relief=tk.GROOVE,
borderwidth=1) 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, self.fuzzy_button = tk.Button(self.main_frame,
text="模糊搜索", text="模糊搜索",
@ -97,7 +108,8 @@ class GUI:
# 按钮和结果区域 # 按钮和结果区域
self.query_button.pack(pady=15) self.query_button.pack(pady=15)
self.result_frame.pack(fill='both', expand=True, pady=(10,0)) 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, tk.Label(self.input_frame,
@ -111,7 +123,10 @@ class GUI:
"""处理模糊搜索按钮点击事件""" """处理模糊搜索按钮点击事件"""
keyword = self.fuzzy_entry00.get().strip() keyword = self.fuzzy_entry00.get().strip()
if not keyword: 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 return
self.fuzzy_button.config(state=tk.DISABLED, text="搜索中...") self.fuzzy_button.config(state=tk.DISABLED, text="搜索中...")
@ -119,16 +134,22 @@ class GUI:
try: try:
results = fuzzy_search_book(keyword) results = fuzzy_search_book(keyword)
self.result_text.config(state=tk.NORMAL)
self.result_text.delete(1.0, tk.END)
if isinstance(results, str): if isinstance(results, str):
self.result_label.config(text=results) self.result_text.insert(tk.END, results)
else: else:
formatted_results = "\n\n".join( formatted_results = "\n\n".join(
"\n".join(f"{k}: {v}" for k, v in book.items()) "\n".join(f"{k}: {v}" for k, v in book.items())
for book in results 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: 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: finally:
self.fuzzy_button.config(state=tk.NORMAL, text="模糊搜索") self.fuzzy_button.config(state=tk.NORMAL, text="模糊搜索")
@ -136,7 +157,10 @@ class GUI:
"""处理查询按钮点击事件""" """处理查询按钮点击事件"""
isbn = self.entry00.get().strip() isbn = self.entry00.get().strip()
if not isbn: 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 return
# 禁用按钮防止重复点击 # 禁用按钮防止重复点击
@ -145,14 +169,20 @@ class GUI:
try: try:
result = query_isbn(isbn) result = query_isbn(isbn)
self.result_text.config(state=tk.NORMAL)
self.result_text.delete(1.0, tk.END)
if isinstance(result, dict): if isinstance(result, dict):
formatted_result = "\n".join(f"{k}: {v}" for k, v in result.items()) 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: 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: 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: finally:
# 恢复按钮状态 # 恢复按钮状态
self.query_button.config(state=tk.NORMAL, text="查询") self.query_button.config(state=tk.NORMAL, text="查询")
@ -160,52 +190,20 @@ class GUI:
def display_results(self, results): def display_results(self, results):
"""以表格形式显示查询结果""" """以表格形式显示查询结果"""
# 清空原有内容 # 清空原有内容
for widget in self.result_frame.winfo_children(): self.result_text.config(state=tk.NORMAL)
widget.destroy() 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)): if isinstance(results, str) or (isinstance(results, list) and len(results) == 1 and isinstance(results[0], str)):
# 处理错误信息 # 处理错误信息
tk.Label(self.result_frame, self.result_text.insert(tk.END, results if isinstance(results, str) else results[0])
text=results if isinstance(results, str) else results[0], else:
font=('微软雅黑', 10), # 创建表格形式的文本
wraplength=500, for book in results:
justify='left', for key, value in book.items():
bg='white', self.result_text.insert(tk.END, f"{key}: {value}\n")
padx=10, self.result_text.insert(tk.END, "\n")
pady=10).pack(expand=True, fill='both')
return self.result_text.config(state=tk.DISABLED) # 恢复为只读
# 创建表格框架
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)
if __name__ == '__main__': if __name__ == '__main__':
app = GUI() app = GUI()

Loading…
Cancel
Save