如何用Python Tkinter创建搜索表单查询SQLite3数据库
Tkinter + SQLite3 实现姓名搜索表单
我来帮你补全并优化代码,实现通过姓名查询SQLite数据库的功能。先梳理下需要完善的点:调整模块导入顺序、正确绑定窗口组件、实现搜索逻辑,还有添加结果展示区域。
以下是完整的可运行代码:
import sqlite3 from tkinter import Tk, Entry, Button, Text, Label, END def search_person(): # 获取输入的姓名并做非空校验 name = entry_name.get().strip() if not name: result_text.delete(1.0, END) result_text.insert(END, "请输入要查询的姓名!") return # 连接数据库并执行查询 conn = None try: conn = sqlite3.connect('new_assignment.db') cursor = conn.cursor() # 这里假设你的人员表名为persons,姓名字段为name,记得根据实际表结构修改 cursor.execute("SELECT * FROM persons WHERE name LIKE ?", (f"%{name}%",)) records = cursor.fetchall() # 清空结果框并展示查询结果 result_text.delete(1.0, END) if not records: result_text.insert(END, f"未找到姓名包含'{name}'的人员信息") else: result_text.insert(END, "查询结果:\n") for idx, record in enumerate(records, 1): result_text.insert(END, f"第{idx}条:{record}\n") except sqlite3.Error as e: result_text.delete(1.0, END) result_text.insert(END, f"数据库查询出错:{str(e)}") finally: # 确保数据库连接最终关闭,避免资源泄漏 if conn: conn.close() # 创建主窗口 top = Tk() top.title('人员信息搜索表单') top.geometry("500x400") # 设置窗口初始大小 # 姓名输入区域 label_name = Label(top, text="请输入姓名:") label_name.pack(pady=5) entry_name = Entry(top, width=30) entry_name.pack(pady=5) # 搜索按钮 search_btn = Button(top, text="搜索", command=search_person, width=10) search_btn.pack(pady=10) # 结果展示区域 result_label = Label(top, text="查询结果:") result_label.pack(pady=5) result_text = Text(top, width=60, height=15) result_text.pack(pady=5) # 启动窗口主循环 top.mainloop()
关键部分说明
- 模块导入:先导入
sqlite3和tkinter组件,避免代码顺序混乱。 - 搜索函数:
- 先做输入非空校验,避免无效查询;
- 用
try-except-finally处理数据库操作,确保连接无论成功失败都会关闭; - 使用
LIKE和占位符?实现模糊搜索,同时避免SQL注入风险; - 把查询结果展示在Text组件中,友好提示无结果或错误信息。
- 窗口布局:给每个组件指定父窗口,设置合理的间距让界面更美观,添加结果展示区域方便查看多条记录。
注意事项
你需要确保数据库new_assignment.db中存在对应的人员表(比如示例中的persons),并且姓名字段名和你的实际表结构一致,记得修改SELECT语句中的表名和字段名。如果需要精确匹配,把LIKE ?改成= ?,并去掉f"%{name}%"中的百分号,改成(name,)即可。
内容的提问来源于stack exchange,提问作者Manjil Lamichhane
相关产品推荐
相关产品推荐

