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

tkinter+sqlite3开发员工管理系统matplotlib绘图失败如何解决

绘图功能修复说明

需要修改的错误点如下:

  • 数据库连接语句错误:connect(project.db) 中的 project.db 属于字符串参数,必须用单引号/双引号包裹,否则Python会将project识别为未定义变量直接报错。
  • 绘图数据源为空:你从数据库查询得到的data结果集没有填充到name和salary列表中,两个空列表无法生成折线图。
  • 图表显示方法未调用:plt.show是可调用的函数对象,必须添加括号写成plt.show()才会触发弹窗显示图表的逻辑。
  • 附带逻辑错误:graphback函数中的main_window.withdraw也缺少括号,会导致返回主窗口的逻辑异常。

以下为修正后的完整代码,默认假设你的employee表字段顺序为【id、姓名、薪资】,如果你的表字段顺序不同,调整遍历data时的索引值即可:

from tkinter import *
from tkinter.messagebox import *
from tkinter.scrolledtext import *
from sqlite3 import *
import matplotlib.pyplot as plt

def graphback():
    graph_window.deiconify()
    main_window.withdraw() # 补充括号执行窗口隐藏方法

def graph():
    con = None
    try:
        con = connect("project.db") # 给数据库名添加引号
        cursor = con.cursor()
        sql = "select * from employee"
        cursor.execute(sql)
        data = cursor.fetchall()
        name = []
        salary = []
        # 遍历查询结果填充绘图数据源
        for emp in data:
            name.append(emp[1]) # 取第二列作为员工姓名,可根据实际表结构调整索引
            salary.append(emp[2]) # 取第三列作为员工薪资,可根据实际表结构调整索引
        plt.plot(name, salary)
        plt.title("Highest Salaried Employee")
        plt.show() # 补充括号执行图表显示方法
    except Exception as e:
        showerror("issue ", e)
        if con: # 避免连接为空时执行回滚报错
            con.rollback()
    finally:
        if con is not None:
            con.close()
    

def mgraph():
    main_window.deiconify()
    graph_window.withdraw()

内容的提问来源于stack exchange,提问作者Sharii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:45:05