在tkinter窗口中展示matplotlib图表

在毕设作业中准备使用python的tkinter库制作图形界面系统,用以完成最基本的进销存系统,但在读取mysql数据库,展示在窗口上时,出现问题。查询资料发现,tkinter并不提供图表服务,如果想要在表格中展示数据,只有两种办法,一种是在窗口中通过canvas组件绘制表格,并把数据放在对应的表格位置,但这种方法的工作量大,不利于大量数据展示,而且进销存系统的表格条目各不相同,如果使用该方法,就要为每一张表格,绘制各自的canvas图表,基本不可能实现。其二,便是借助其他库的帮助。
本文选择借助matplotlib库,使用该库的table组件,完成表格展示。

#在该组件展示中,并不是引入的每一个库都发挥作用,因为试验过程中偶尔出现未引入错误,故此将项目中使用的所有库都引入进来方便使用
from tkinter import *
import pymysql
from pandas import *
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from matplotlib.pylab import mpl

#连接数据库,获取数据
db = pymysql.connect('localhost','root','root','medicine')
cur = db.cursor()
sql = 'select * from tb_purchase'
cur.execute(sql)
user_x = []
user_y = []
user_z = []
user_w = []
results = list(cur.fetchall())
for row in results:
    user_x.append(row[0])
    user_y.append(row[1])
    user_z.append(row[2])
    user_w.append(row[3])
#截取每一项数据前六条
x = user_x[0:6]
y = user_y[0:6]
z = user_z[0:6]
w = user_w[0:6]
#截取每一项数据后两条
m = user_x[-2:]
n = user_y[-2:]
p = user_z[-2:]
q = user_w[-2:]
data = np.array([user_x,user_y,user_z,user_w])
#因数据过多,如果加入右侧滑动块,展示全部数据,不利于使用,因此展示选择前六条和后两条,中间用省略号表示
data1 = np.array([x+['...']+m,y+['...']+n,z+['...']+p,w+['...']+q])
df = DataFrame(data.T,columns=["药品","供应商","总销售额","增长"])
matplotlib.use('TkAgg') #使用组件
mpl.rcParams['font.sans-serif'] = ['SimHei'] #组件字体
root = Tk()  #构建窗口
f = plt.figure(figsize=(7.6,5.2)) #窗口大小
a = f.add_subplot(111,frameon=False,xticks=[],yticks=[]) #frameon选择是否显示组建本身的横纵坐标,因为只要显示表格,所以选择False
a.set_title("销售信息表",loc='center',pad=10,fontsize='xx-large') #设置组件相关
a = df.index[-2]+1
b = df.index[-1]+1 #截取数据最后的索引,确定数据数目
table = plt.table(cellText=data1.T,colLabels=df.columns,rowLabels=['1','2','3','4','5','6','...']+[str(a),str(b)],colWidths=[0.1]*data.shape[1],loc='upper center',cellLoc='center')
table.set_fontsize(13) #字体大小
table.scale(3,2.3) #每一个小表格的尺寸
canvas = FigureCanvasTkAgg(f, master=root)  #将构建的图表放置在canvas上,该canvas是使用FigureCanvasTkAgg组件构建的,然后设置canvas展示在root窗口
canvas.draw() 
canvas.get_tk_widget().grid(row=0, columnspan=3)    
root.mainloop()

绘制截图如下

python tkinter 设计表格 tkinter绘制表格_python tkinter 设计表格


以上就是关于在tkinter窗口中展示matplotlib表格的方法。