美文网首页python
在Tkinter界面中嵌入matplotlib图表

在Tkinter界面中嵌入matplotlib图表

作者: 不思九八 | 来源:发表于2020-01-07 22:50 被阅读0次

Tkinter是Python的一个GUI库, Matplotlib是一个Python的2D绘图库, 把使用matplotlib的图形嵌入到thinter界面中是有意义的,尤其是在使用thinter开发PC端应用程序的时候。

matplotlib官方提供了很好的解决方案,下面是根据官方的例子进行改造的代码,在Tkinter 界面中显示一个Scatter图表。

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")

np.random.seed(19680801)

fig = Figure(figsize=(5, 4), dpi=100)
canvas = FigureCanvasTkAgg(fig, master=root)  # A tk.DrawingArea.
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()     # 停止主循环
    root.destroy()  # this is necessary on Windows to prevent
                    # Fatal Python Error: PyEval_RestoreThread: NULL tstate

def set_chart():
    """清除原有图表,生成新的图表"""
    global fig,canvas
    fig.clear()

    # 计算颜色和面积
    N = 150
    r = 2 * np.random.rand(N)
    theta = 2 * np.pi * np.random.rand(N)
    area = 200 * r**2
    colors = theta
    ax = fig.add_subplot(111, projection='polar')
    ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)
    canvas.draw()

# 生成并显示图表
set_chart()

frm_1 = tkinter.Frame(master=root)             
button = tkinter.Button(master=frm_1, text="Change", command=set_chart)
button.pack(side=tkinter.LEFT)

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

tkinter.mainloop()

EmbedinTk.png

相关文章

网友评论

    本文标题:在Tkinter界面中嵌入matplotlib图表

    本文链接:https://www.haomeiwen.com/subject/dozdactx.html