Hallo,
ich habe ein Klasse geschrieben, die ein PyQt5 QWidget erstellt und in diesem Fenster dann verschiedene Plots (Matplotlib) anzeigt.
Diese Klasse wird dann mehrmals, in einem gewissem Abstand, wo anders aufgerufen (mit jeweils anderen Daten für die Plots). Jedes Mal wird jetzt ein neues Fenster geöffnet. Ich möchte jetzt, dass das erste Mal ein Fenster erstellt wird und die folgenden Male die neuen Plots in mein altes Fenster geplotted werden. Weiß jemand, wie ich das machen kann? Das Ganze sollte möglichst in meiner "Widget-Klasse" realisiert werden.
Sorry, bin noch ein Anfänger mit PyQt. Google hat mir auch nicht so wirklich weitergeholfen. Danke schon einmal im Voraus.
            
			
									
						
										
						PyQt5 - neue Plots in selbes Fenster
Erst mal danke für die schnelle Antwort. Hier ist der Code, in dem ich das Fenster erstelle und darin plotte.
            
			
									
						
										
						Code: Alles auswählen
class plotWindow(QWidget):
    
    	import sys
	from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout
	from PyQt5 import QtCore
	from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
	from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
	import matplotlib.pyplot as plt
	import matplotlib.gridspec as gridspec
	import numpy as np
	from scipy.signal import butter, lfilter
    
    def __init__(self, data, number):
    
      [...]
        
        #Plotfenster wird hier erstellt
        super().__init__()
        
        self.title = 'Plot'
        self.left = 100
        self.top = 30
        self.width = 1100
        self.height = 1100
        
        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)     
        self.toolbar = NavigationToolbar(self.canvas, self)
        self.canvas.toolbar.hide()
        
        grid = QGridLayout()
        self.setLayout(grid)
        
        grid.addWidget(self.canvas, 1,0,1,3)
        grid.addWidget(self.toolbar, 0,0,1,3)
        
        self.figure.subplots_adjust(left=0.05)     
        self.figure.subplots_adjust(right=0.95)
        self.figure.subplots_adjust(bottom=0.1)
        self.figure.subplots_adjust(top=0.9)
        self.figure.subplots_adjust (hspace=0.3)
        
        self.gs = gridspec.GridSpec(3,2)
        
        [...]
            
        self.plot_tr_stim_burst (self.data_tr, self.data_stim, self.data_burst, self.t)
        self.plot_raw(self.data_x, self.data_y, self.data_z,self.t)
        self.plot(self.t, self.data_x, self.data_y, self.data_z)
        self.max_acceleration = self.get_max(self.data_x, self.data_y, self.data_z)
        self.initUI() 
        
    def initUI(self):
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.setWindowTitle(self.title)
        self.show()
        
       [...]
       
     Bitte gewöhn dir das sofort ab die Importe innerhalb des class-Statements zu machen. Das macht man so nicht. Die gehören an den Anfang des Moduls. 
Und zu deinem eigentlichen Problem: da du alles im Konstruktor machst, bist du natürlich gezwungen ein Widget neu zu machen.
Wenn du stattdessen den Code in eine Methode packst, kannst du entweder
- den canvas aus dem Parent entfernen & neu erstellen.
- den canvas selbst einfach leeren & dann neu Plotten. Wie genau das geht musst du mal in der Doku nachschlagen bzw im Interpreter mit rumspielen.
            
			
									
						
										
						Und zu deinem eigentlichen Problem: da du alles im Konstruktor machst, bist du natürlich gezwungen ein Widget neu zu machen.
Wenn du stattdessen den Code in eine Methode packst, kannst du entweder
- den canvas aus dem Parent entfernen & neu erstellen.
- den canvas selbst einfach leeren & dann neu Plotten. Wie genau das geht musst du mal in der Doku nachschlagen bzw im Interpreter mit rumspielen.
Scheint über die figure zu gehen: https://stackoverflow.com/questions/821 ... matplotlib
            
			
									
						
										
						