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

目录

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

目录

前言

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

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

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

(一)小目标

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

1.首页卷面:

2.绘制一条函数曲线:

3.绘制多条曲线:

(二)官方教材

1.对GUI框架的支持:

(1)官方网站

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

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

(2)各种GUI说明截图:

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)实例的输出效果:

(三)对官方教程的解读

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

# 导入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

时间: 2024-10-11 12:56:54

tkinter内嵌Matplotlib系列(一)之解读官网教材的相关文章

lumisoft.net 邮件管理系列文章 - 如何判断附件为内嵌式还是附加式

如果要区分邮件里面的附件是内嵌图片附件还是真正的附件,那么可以通过下面代码进行判断,如果是MIME_DispositionTypes.Attachment的就是普通附件,MIME_DispositionTypes.Inline的就是内嵌正文的附件. entity.ContentDisposition.DispositionType == MIME_DispositionTypes.Attachment

4.1Python数据处理篇之Matplotlib系列(一)---初识Matplotlib

目录 目录 前言 (一)matplotlib的介绍 (二)画一个简单的画布 ==1.源代码== ==2.展示效果== (三)画布按键的功能介绍 ==1.对于画布功能键的排序== ==(1)主页== ==(2)上一个视图== ==(3)下一个视图== ==(4)移动查看== ==(5)放大查看== ==(6)窗体设置== ==(7)保存图片== 目录 前言 对于数据可视化的python库,对于Matplotlib早有耳闻,今天就来正式学习一下. (一)matplotlib的介绍 matplotli

Stratix内嵌存储器测试报告

     Stratix和Stratix GX系列器件内嵌TriMatrix存储块包括512-bit M512块.4-Kbit M4K块及512-Kbit M-RAM块.TriMatrix存储结构可对输入和输出RAM块的信号加上寄存器级,实现同步(pipelined) RAM.所有TriMatrix存储器输入均为寄存器级,提供同步写周期.输出寄存器可被旁路(bypassed).全同步的简单或真正双端口TriMatrix存储器的工作速度高达312MHz,可工作于flow-through模式(仅有输

小程序内嵌网页的开放是一场创业公司的及时雨吗

11.2晚小程序突然开放两个重磅能力:1.小程序内可直接打开网页,2.小程序可关联500个公众号.通过研究,我们发现这次新能力的开放,促使小程序推动微信的春秋战国时代来临.有开发者感叹,不懂小程序的人,以后就不要出来谈营销啦!接下来,我们就听听萤火新媒萤连长从三个方向为大家解读,为什么新能力的开放是一场创业公司的及时雨.一.对于开发者.运营者有哪些好处1.小程序有了自己的流量用户使用小程序时,可以从小程序直接进入到内嵌网页,同时也支持用户从内嵌网页返回小程序.这样一来,小程序也可以做成小的流量分

Java设置PPT的扇形图,与内嵌Excel联动

/** * 设置饼图的主方法 * @param slide 图表 * @param index 图标位置 * @param data 需要设置的数据 * @param titles 关联Excel的标题 * @return */ public static XSLFSlide setPieChart(XSLFSlide slide, int index, List<String> data, List<String> titles) { // 获取指定位置的图形 XSLFChart

colormap中的内嵌彩色模块和调用方式

内嵌彩色模块代码: import numpy as npimport matplotlib.pyplot as plt # Have colormaps separated into categories:# http://matplotlib.org/examples/color/colormaps_reference.html cmaps = [('Perceptually Uniform Sequential', ['viridis', 'inferno', 'plasma', 'magm

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

使内嵌式jetty服务器支持jsp

1.jetty是什么 jetty是一个轻量级的web服务器,类似tomcat,但用起来比tomcat灵活,尤其是支持内嵌式使用.所谓内嵌式即以java语句的形式启动jetty,这样我们可以无需部署和启动web容器就能达到同样的效果.这对于简单的基于http协议的应用以及调试程序就方便的多了. 2.一个简单的jetty服务器 简单到仅需类似以下几条语句: public class JettySample { public static void main(String[] args)throws 

GCC内嵌AT&amp;T汇编语法

一 基本语法 1 寄存器引用 引用寄存器要在寄存器号前加百分号%,如"movl %eax, %ebx". 80386有如下寄存器: 1.8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp: 2.8个16-bit寄存器,它们事实上是上面8个32-bit寄存器的低16位:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp: 3.8个8-bit寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl.它们事实上是寄