为了账号安全,请及时绑定邮箱和手机立即绑定

tkinter GUI 中的多个 matplotlib 实例

tkinter GUI 中的多个 matplotlib 实例

呼唤远方 2023-10-18 10:49:05
我已经构建了简单的 tkinter GUI。现在,我尝试可视化 3 个不同的图形(通过使用不同的变量调用相同的函数)并将它们放置在 GUI 的 3 个不同行中。当我这样做时,我遇到了两个问题:每次运行脚本(interface.py)时,我都会得到 2 个窗口 - GUI 和外部图形的窗口。如何摆脱第二个?我无法可视化所有 3 个图表。脚本在显示第一个脚本后停止。我相信这是因为第一个图在循环中工作(迭代大量数据点)。有什么解决办法吗?界面:# -*- coding: utf-8 -*-"""Created on Tue Oct  6 10:24:35 2020@author: Dar0"""from tkinter import * #import tkinter modulefrom visualizer import main #import module 'visualizer' that shows the graph in real timeclass Application(Frame):    ''' Interface for visualizing graphs, indicators and text-box. '''    def __init__(self, master):        super(Application, self).__init__(master)        self.grid()        self.create_widgets()        def create_widgets(self):        # Label of the 1st graph        Label(self,              text='Hook Load / Elevator Height / Depth vs Time'              ).grid(row = 0, column = 0, sticky = W)                # Graph 1 - Hook Load / Elevator Height / Depth vs Time        # button that displays the plot         #plot_button = Button(self,2        #                     command = main,        #                     height = 2,         #                     width = 10,         #                     text = "Plot"        #                     ).grid(row = 1, column = 0, sticky = W)                self.graph_1 = main(root, 1, 0)        # place the button         # in main window                 # Label of the 2nd graph        Label(self,              text = 'Hook Load / Elevator Height vs Time'              ).grid(row = 3, column = 0, sticky = W)                # Graph 2 - Hook Load / Elevator Height vs Time        self.graph_2 = main(root, 4, 0)                #Label of the 3rd graph        Label(self,              text = 'Hook Load vs Time'              ).grid(row = 6, column = 0, sticky = W)       
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

关键是pyplot当你想在内部绘制时不要使用,matplotlib.figure.Figure

下面是一个最小示例,它沿着我在您的代码中看到的小部件绘制了 3 个独立的图表Text

import pandas as pd

import numpy as np

import tkinter as tk

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk

from matplotlib.figure import Figure

    

class Graph(tk.Frame):

    def __init__(self, master=None, title="", *args, **kwargs):

        super().__init__(master, *args, **kwargs)

        self.fig = Figure(figsize=(4, 3))

        ax = self.fig.add_subplot(111)

        df = pd.DataFrame({"values": np.random.randint(0, 50, 10)}) #dummy data

        df.plot(ax=ax)

        self.canvas = FigureCanvasTkAgg(self.fig, master=self)

        self.canvas.draw()

        tk.Label(self, text=f"Graph {title}").grid(row=0)

        self.canvas.get_tk_widget().grid(row=1, sticky="nesw")

        toolbar_frame = tk.Frame(self)

        toolbar_frame.grid(row=2, sticky="ew")

        NavigationToolbar2Tk(self.canvas, toolbar_frame)

    

root = tk.Tk()


for num, i in enumerate(list("ABC")):

    Graph(root, title=i, width=200).grid(row=num//2, column=num%2)


text_box = tk.Text(root, width=50, height=10, wrap=tk.WORD)

text_box.grid(row=1, column=1, sticky="nesw")

text_box.delete(0.0, "end")

text_box.insert(0.0, 'My message will be here.')


root.mainloop()

结果:

https://img1.sycdn.imooc.com/652f4aed0001eab106510607.jpg

查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信