tkinter 嵌套matplotlib python数据可视化 举个例子 论造轮子

# -*- coding: utf-8 -*- import tkinter from tkinter import * import matplotlib from tkinter import ttk matplotlib.use('Agg') # 该模式下绘图无法显示,plt.show()也无法作用 from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) # Implement the default Matplotlib key bindings. from matplotlib.backend_bases import key_press_handler from matplotlib.figure import Figure import matplotlib.pyplot as plt import numpy as np import pandas as pd import pymysql def search_info(sql): db_conn = pymysql.connect( host='host', port=3306, user='root', password='1234', database='cb_zhoubao', charset='utf8' ) sql = sql df = pd.read_sql(sql, con=db_conn) return df # 字体 matplotlib.rcParams['font.sans-serif'] = ['KaiTi'] root = tkinter.Tk() root.geometry("1803x986") root.resizable(width=0, height=0) root.wm_title("风险小组绩效统计") def picture(width,height,y_name,x_name,title): fig, axs = plt.subplots( figsize=(width, height), sharey=True) names = y_name values = x_name axs.barh(names, values,color='b',height=0.5) # axs[1].barh(list(df2['task_name']), list(df2['task_tempo'])) # axs[2].plot(names, values) fig.suptitle(title) return fig def on_key_press(event): print("you pressed {}".format(event.key)) key_press_handler(event, canvas, toolbar) sql_info="SELECT a.employ_name,sum(task_tempo/t.task_grade) as task_math from task_info as t LEFT JOIN (SELECT w.create_time,w.employ_name,e.employ_group,w.task_name,w.task_tempo,w.time_work from employ as e LEFT JOIN work_info as w on e.employ_name=w.employ_name where task_tempo is not null ) as a ON t.task_name = a.task_name WHERE a.task_name is not null and a.employ_group='风险' group by employ_name " canvas = FigureCanvasTkAgg(picture(10,5,list(search_info(sql_info)['employ_name']),list(search_info(sql_info)['task_math']),'绩效排名'), master=root) # A tk.DrawingArea. canvas.draw() canvas.get_tk_widget().grid(column=1,row=0) canvas.mpl_connect("key_press_event", on_key_press) slq="SELECT task_name,sum(task_tempo)as task_tempo from employ as e LEFT JOIN work_info as w on e.employ_name=w.employ_name where task_tempo is not null GROUP BY task_name" canvasa = FigureCanvasTkAgg(picture(10,5,list(search_info(slq)['task_name']),list(search_info(slq)['task_tempo']),'任务完成度'), master=root) # A tk.DrawingArea. canvasa.draw() canvasa.get_tk_widget().grid(column=1,row=1) canvasa.mpl_connect("key_press_event", on_key_press) tree=ttk.Treeview(root,height=48) tree.place(x=1000, y=0) tree["columns"]=("时间","姓名","任务","完成量") tree.column("时间",width=120) tree.column("姓名",width=110) tree.column("任务") tree.column("完成量") tree.heading("时间",text="时间") tree.heading("姓名",text="姓名") tree.heading("任务",text="任务") tree.heading("完成量",text="完成量") for i in search_info("SELECT w.create_time,w.employ_name,task_name,task_tempo as task_tempo from employ as e LEFT JOIN work_info as w on e.employ_name=w.employ_name where task_tempo is not null").iloc: tree.insert('',1,values=(i[0],i[1],i[2],i[3])) def _quit(): print('quit') root.quit() # stops mainloop root.destroy() # this is necessary on Windows to prevent tkinter.mainloop()
Auto Copied
Auto Copied
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人