在Tkinter界面中嵌入matplotlib图表

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在 Python shell 中使用 Matplotlib 原文:Using matplotlib in a py...
    布客飞龙阅读 870评论 0 3
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 3,034评论 1 3
  • 这个世界上你认识那么多的人,那么多人和你有关, 你再怎么改变也不能让每个人都喜欢你, 所以还不如做一个自己想做的人...
    呜呼阅读 255评论 0 3
  • 1 刻意思考,哪些地方需要刻意练习。 2 你不能没有自我,也不能只有自我。 3 意识到自己是怎么想的是反思的前提。...
    ziworeborn阅读 111评论 0 1
  • 西安,我走过 五一,去了西安,一趟说走就走的旅行。 三十日早上,路遇同事,问道:小王,五一你要去哪玩啊?对曰:宅家...
    弱德之美阅读 297评论 0 0