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
posted @ 2022-09-06 00:10  佟大帅  阅读(256)  评论(0编辑  收藏  举报