Seite 1 von 1

PyQt5 - neue Plots in selbes Fenster

Verfasst: Mittwoch 10. Januar 2018, 11:36
von Matze94
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.

Re: PyQt5 - neue Plots in selbes Fenster

Verfasst: Mittwoch 10. Januar 2018, 11:41
von __deets__
Ich sehe keinen Grund, warum das nich funktionieren sollte. Was ich genauso wenig sehe ist Code, womit man dann auch nur mich den Achseln zucken kann.

Re: PyQt5 - neue Plots in selbes Fenster

Verfasst: Mittwoch 10. Januar 2018, 13:57
von Matze94
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()
        
       [...]
       
     

Re: PyQt5 - neue Plots in selbes Fenster

Verfasst: Mittwoch 10. Januar 2018, 14:27
von __deets__
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.

Re: PyQt5 - neue Plots in selbes Fenster

Verfasst: Mittwoch 10. Januar 2018, 14:31
von __deets__