当前位置: 首页 > news >正文

tkinter内嵌Matplotlib系列(一)之解读官网教材

目录

  • 目录
  • 前言
  • (一)小目标
    • 1.首页卷面:
    • 2.绘制一条函数曲线:
    • 3.绘制多条曲线:
  • (二)官方教材
    • 1.对GUI框架的支持:
    • 2.内嵌于tkinter的说明文档:
  • (三)对官方教程的解读

目录

前言

当有一天,你所学的东西连成一条线。那会是一种什么样的体会?

以前学习tkinter,现在学习matplotlib,当tkinter遇上matplotlib会不会产生火花嘞。

今天我们开始学习再tkinter里内嵌matplotlib,实现自定制的绘图和自定制的窗体。

(一)小目标

我们先来看一下,本小节最终的效果

1.首页卷面:

01.png

2.绘制一条函数曲线:

02.png

3.绘制多条曲线:

03.png

(二)官方教材

1.对GUI框架的支持:

(1)官方网站:

https://matplotlib.org/gallery/index.html

该页面内容比较大,不容易找到需要的内容。可以再侧旁的目录下-找到"Embedding Matplotlib in graphical user interfaces",便是。

05.png

(2)各种GUI说明截图:

04.png

2.内嵌于tkinter的说明文档:

(1)官方网站

https://matplotlib.org/gallery/user_interfaces/embedding_in_tk_sgskip.html#sphx-glr-gallery-user-interfaces-embedding-in-tk-sgskip-py

(2)实例源代码:

import tkinter

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 numpy as np


root = tkinter.Tk()
root.wm_title("Embedding in Tk")

fig = Figure(figsize=(5, 4), dpi=100)
t = np.arange(0, 3, .01)
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))

canvas = FigureCanvasTkAgg(fig, master=root)  # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)


def on_key_press(event):
    print("you pressed {}".format(event.key))
    key_press_handler(event, canvas, toolbar)


canvas.mpl_connect("key_press_event", on_key_press)


def _quit():
    root.quit()     # stops mainloop
    root.destroy()  # this is necessary on Windows to prevent
                    # Fatal Python Error: PyEval_RestoreThread: NULL tstate


button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)

tkinter.mainloop()
# If you put root.destroy() here, it will cause an error if the window is
# closed with the window manager.

(3)实例的输出效果:

06.png

(三)对官方教程的解读

以下是本人对官方教程的解读,有出错之处,还请大佬们多多指出。

# 导入tkinter模块
import tkinter

# 创建画布需要的库
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 创建工具栏需要的库
from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk

# 快捷键需要的模块
from matplotlib.backend_bases import key_press_handler

# 导入绘图需要的模块
from matplotlib.figure import Figure



# 实例化一个根窗口与设置标题
root = tkinter.Tk()
root.wm_title("Embedding in Tk")

# 画布的大小和分别率
fig = Figure(figsize=(5, 4), dpi=100)



# 利用子图画图
axc = fig.add_subplot(111)
axc.plot([1, 2, 3, 4, 5])

# 创建画布控件
canvas = FigureCanvasTkAgg(fig, master=root)  # A tk.DrawingArea.
canvas.draw()
# 显示画布控件
canvas.get_tk_widget().pack()

# 创建工具条控件
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
# 显示工具条控件
canvas.get_tk_widget().pack()


# 绑定快捷键函数
def on_key_press(event):
    print("you pressed {}".format(event.key))
    key_press_handler(event, canvas, toolbar)


# 调用快捷键函数
canvas.mpl_connect("key_press_event", on_key_press)


# 退出函数
def _quit():
    root.quit()
    root.destroy()


# 退出按钮控件
button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)

# 消息循环
tkinter.mainloop()

作者:Mark

日期:2019/02/15 周五

转载于:https://www.cnblogs.com/zyg123/p/10385456.html

相关文章:

  • SpringMvc4.0.0+Spring4.0.0+Mybatis3.2.7整合开发
  • js-时间戳转字符串
  • PYTHON2.day02
  • POJ3635 Full Tank
  • 家庭记事本开发进度1
  • Winodws 10 美化与调优
  • matlab-基础 快捷键 命令行窗口 输入多行命令
  • Redis在Web项目中的应用与实践
  • TLS 1.3 Handshake Protocol (下)
  • 前端_面试
  • 67 亿美金搞个图,创建知识图谱的成本有多高你知道吗?
  • 重学前端-css选择器
  • 对象引论
  • Windows Core OS预计将更多地依赖于这些组件
  • 【技术性】Search知识
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Docker入门(二) - Dockerfile
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • PHP 小技巧
  • TCP拥塞控制
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 产品三维模型在线预览
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 二维平面内的碰撞检测【一】
  • 力扣(LeetCode)357
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 区块链将重新定义世界
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 系统认识JavaScript正则表达式
  • 协程
  • 用 Swift 编写面向协议的视图
  • !!java web学习笔记(一到五)
  • # Panda3d 碰撞检测系统介绍
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (js)循环条件满足时终止循环
  • (pojstep1.3.1)1017(构造法模拟)
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net 无限分类
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [1127]图形打印 sdutOJ