You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3学生管理系统搜索失效、数据不显示到GUI问题排查

故障修复方案

核心问题点

  • 数据库操作(新增/修改/删除)后未刷新界面表格,导致新数据无法主动展示
  • 搜索功能仅做了存在性校验,未将匹配到的结果渲染到输入框和表格
  • 存在多处语法/逻辑错误:cursor调用commit()(实际应为连接对象conn.commit())、滚动条配置错误、首次加载未执行查询语句、缺少os模块导入导致退出功能报错

修复代码

1. 补全模块导入

import os # 新增,退出功能依赖该模块
import signal
from tkinter import *
# 其余原有导入保持不变

2. 修复新增数据函数

def get():
    c.execute('CREATE TABLE IF NOT EXISTS database (Sid INTEGER NOT NULL UNIQUE,Fname TEXT,Lname TEXT, Contact INTEGER UNIQUE,City TEXT,State TEXT)')
    try:
        c.execute('INSERT INTO database (Sid,Fname,Lname,Contact,City,State) VALUES (?, ?, ?, ?, ?, ?)',(Sid.get(), Fname.get(), Lname.get(), Contact.get(), City.get(), State.get()))
        conn.commit() # 修复:原代码错误使用c.commit(),cursor无commit方法
        clear()
        open_db() # 新增:操作完成后刷新表格
        messagebox.showinfo("提示", "录入成功")
    except Exception as e:
        messagebox.showerror("错误", f"录入失败:学号/手机号已存在\n{e}")

3. 修复更新/删除函数(操作后刷新表格)

def update_db():
    try:
        c.execute('UPDATE database SET Fname=?,Lname=?,Contact=?,City=?,State=? WHERE Sid=?',(Fname.get(),Lname.get(),Contact.get(),City.get(),State.get(),Sid.get()))
        conn.commit()
        clear()
        open_db() # 新增:刷新表格
        messagebox.showinfo("提示", "更新成功")
    except Exception as e:
        messagebox.showerror("错误", f"更新失败\n{e}")

def delete_db():
    try:
        c.execute('DELETE FROM database WHERE Sid=?',(Sid.get(),))
        conn.commit()
        clear()
        open_db() # 新增:刷新表格
        messagebox.showinfo("提示", "删除成功")
    except Exception as e:
        messagebox.showerror("错误", f"删除失败\n{e}")

4. 重写搜索函数,匹配后渲染结果

def search():
    target_sid = Search_val.get()
    c.execute('SELECT * FROM database WHERE Sid=?', (target_sid,))
    res = c.fetchone()
    if res:
        messagebox.showinfo("提示","学生已找到")
        # 填充到上方输入区域
        Sid.set(res[0])
        Fname.set(res[1])
        Lname.set(res[2])
        Contact.set(res[3])
        City.set(res[4])
        State.set(res[5])
        # 表格展示匹配结果
        tree.delete(*tree.get_children())
        tree.insert('', 'end', values=res)
        return
    messagebox.showerror("错误","学生未找到")

5. 修复初始化加载逻辑与滚动条配置

找到表格初始化代码段,修改如下:

scroll = ttk.Scrollbar(frame, orient="vertical", command=tree.yview)
scroll.pack(side='right', fill='y')
tree.configure(yscrollcommand=scroll.set) # 修复:原代码错误配置为xscrollcommand
tree.delete(*tree.get_children())
# 以下是原有表头配置代码保持不变
tree.heading(1, text="StudentID") 
tree.column(1, minwidth=0, width=125, stretch='NO',anchor='center')
# 其余表头配置省略,保持不变...
tree.heading(6, text="State")
tree.column(6, minwidth=0, width=125, stretch='NO', anchor='center')

c.execute('SELECT * FROM database') # 新增:首次加载主动查询已有数据
data = c.fetchall()
for val in data:
    tree.insert('', 'end', values=(val[0], val[1], val[2], val[3], val[4], val[5])) 
conn.commit()

修改完成后所有功能即可正常运行:录入数据后自动刷新表格、搜索到的学生信息会自动填充到输入框且展示在表格中。

内容的提问来源于stack exchange,提问作者Oscar A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:06