将matplotlib嵌入到tkinter画布中会打开两个窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将matplotlib嵌入到tkinter画布中会打开两个窗口相关的知识,希望对你有一定的参考价值。

以下代码我正在按照我希望的方式行事。我已将matplotlib图形嵌入到tkinter画布中。该程序打开了两个窗口,其中一个功能正常,其中一个没有必要。我不知道如何解决这个问题。这是代码,请忽略不必要的导入:)

import numpy as np
import sys
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib as mpl
from matplotlib import cm
from numpy.random import random
from matplotlib.widgets import Button
import matplotlib.colors
import tkinter as tk
import matplotlib.backends.tkagg as tkagg
from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

DEBUG_MODE = False                          #Debug mode - True = ON
MATRIX_WIDTH = 50
MATRIX_HEIGHT = 50
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
LED_COUNT = MATRIX_WIDTH * MATRIX_HEIGHT
REFRESH_RATE = 30                           #REFRESH_RATE used to control FuncAnimation interval
MATRIX = random((50,50))                    #Fills MATRIX as not to be null for first print  


plt.rcParams['toolbar'] = 'None'            #Disables matplotlib toolbar
fig = plt.figure(figsize=(3,3))             #'figsize' measured in inches
im = plt.imshow(MATRIX, interpolation='nearest', cmap=cm.Spectral)
plt.axis('off')                             #Turns off x, y axis

def data_gen():                             #Generates amd populates MATRIX with pattern data
    while True:        
        MATRIX = random((MATRIX_WIDTH, MATRIX_HEIGHT))
        yield MATRIX
        if (DEBUG_MODE): print("MATRIX yeilded")

def update(data):                           #Updates/prints new MATRIX from data_gen()
    im.set_array(data)
    if (DEBUG_MODE): print("Updated data")



root = tk.Tk()
label = tk.Label(root,text="Matrix Program").grid(column=0, row=0)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(column=0,row=1)


ani = animation.FuncAnimation(fig, update, data_gen, interval=REFRESH_RATE)
plt.show()

需要对此代码执行哪些操作才能从tkinter打开一个画布,并嵌入实时matplotlib图形?

如何设置画布的大小?

答案

如果要在tk GUI中显示您的图形,请不要调用plt.show()。嵌入时最好不要使用pyplot

另一方面,你可能想在某个时候启动mainloop,tk.mainloop()

请参阅matplotlib example,了解如何将matplotlib图形嵌入到tk中。

以上是关于将matplotlib嵌入到tkinter画布中会打开两个窗口的主要内容,如果未能解决你的问题,请参考以下文章

Python Tkinter 在 GUI 中嵌入 Matplotlib

使用带有 pylab/matplotlib 嵌入的 Tkinter 播放、暂停、停止功能的彩色绘图动画:无法更新图形/画布?

将 matplotlib 动画嵌入到 tkinter 帧中

将matplotlib嵌入到tkinter应用程序中

matplotlib 在 tkinter 画布中的缩放功能

将垂直滚动条添加到嵌入式 matplotlib 画布,同时保持其水平大小占据整个 QScrollArea