Python大作业进阶(二)
将已绘制的图用图形用户界面打开
需要用到 Tkinter 模块
加分值:5分?(不能再多了,毕竟百度一搜就可以做出来)
实现代码:
import tkinter
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import matplotlib as plt
import csv
plt.rcParams['font.sans-serif']=['SimHei']
f = open('Province_GDP.csv', 'r',encoding='utf-8')
csvreader = csv.reader(f)
final_list = list(csvreader)
# 将表格中的每个数据的格式改为float类型(之前的为str)
del(final_list[0])
final_ = []
for i in range(len(final_list)):
fin = list(map(lambda x :float(x),final_list[i][1:]))
fin.insert(0,final_list[i][0])
final_.append(fin)
# 将数据以2018年数据排序
final_ = sorted(final_,key=lambda x:x[1],reverse=True)
#print(final_)
root = tkinter.Tk() # 创建tkinter的主窗口
root.title("全国各省2010-2018年GDP变化折线图(x:年,y:亿元)") # tkinter的标题
f = Figure(figsize=(5,3), dpi=100) # 画布尺寸
days = list(range(2010,2019))
sub_plots = [221,222,223,224]
for j in range(4):
f.suptitle('全国各省2010-2018年GDP变化折线图(x:年,y:亿元)\n根据各省2018年GDP排序')
a = f.add_subplot(sub_plots[j])
if j != 3:
for i in range(8*j,8+8*j):
shuju =(final_[i][1:])[::-1]
a.plot(days, shuju,'.-',label = final_[i][0])
a.legend(loc=2) #将图例放在左上角
else :
for i in range(8*j,8+8*j-1):
shuju =(final_[i][1:])[::-1]
a.plot(days, shuju,'.-',label = final_list[i][0])
a.legend(loc=2)
# 将绘制的图形显示到tkinter:创建属于root的canvas画布,并将图f置于画布上
canvas = FigureCanvasTkAgg(f, master=root)
canvas.draw() # 注意show方法已经过时了,这里改用draw
canvas.get_tk_widget().pack(side=tkinter.TOP, # 上对齐
fill=tkinter.BOTH, # 填充方式
expand=tkinter.YES) # 随窗口大小调整而调整
""" # matplotlib的导航工具栏显示上来(默认是不会显示它的) toolbar = NavigationToolbar2Tk(canvas, root) toolbar.update() canvas._tkcanvas.pack(side=tkinter.TOP, # get_tk_widget()得到的就是_tkcanvas fill=tkinter.BOTH, expand=tkinter.YES) """
def _quit():
# 点击退出按钮时调用这个函数
root.quit() # 结束主循环
root.destroy() # 销毁窗口
# 创建一个按钮,并把上面那个函数绑定过来
button = tkinter.Button(master=root, text="退出", command=_quit)
# 按钮放在下边
button.pack(side=tkinter.BOTTOM)
# 主循环
root.mainloop()
结果展示:
感觉没区别?怎么可能,还是有差距的,左上角就是差距/滑稽/