2017-03-25 7 views
0

Ich arbeite an einer GUI-Anwendung, die Graphen mit Matplotlib-Paket generiert, für GUI-Design verwende ich PyQt5. In dieser Anwendung lädt Benutzer die Daten aus einer Zeile und dann auf die Schaltfläche generieren, wird ein verarbeiteter Graph generiert, jetzt ist das Problem, dass beim Schließen des Graphen, wenn Benutzer die neuen Daten lädt, und drücken Sie die Schaltfläche Generieren, Grafik wird nicht erneut angezeigt.Aktualisierung Graph erzeugt mit Matplotlib per Knopfdruck

-Code

import sys 
from PyQt5.QtCore import QCoreApplication 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton 
import numpy as np 
import matplotlib.pyplot as plt 

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True) 
plt.subplots_adjust(hspace=0) 

class window(QMainWindow): 

    def __init__(self): 
     super(window, self).__init__() 
     self.setGeometry(50, 50, 100, 100) 
     self.setWindowTitle('Generate Graph') 
     self.home() 

    def home(self): 
     btn = QPushButton('Generate', self) 
     btn.clicked.connect(self.generate_graph) 
     #btn.resize(100, 100) 
     #btn.move(100, 100) 
     self.show() 

    def generate_graph(self): 
     # In real application these points gets updated 
     x = [0,1,2,3,4,5,6,7,8,9] 
     y1 = [0,1,2,3,4,5,6,7,8,9] 
     y2 = [0,1,2,3,4,5,6,7,8,9] 
     ax1.plot(x,y1) 
     ax2.plot(x,y2) 
     plt.show() 

def run(): 
    app = QApplication(sys.argv) 
    Gui = window() 
    sys.exit(app.exec_()) 

run() 

So bin ich das Beispielprogramm veröffentlichen, das mein Problem zeigen kann, in dieser i eine Schaltfläche erstellt und zwei Parzellen erzeugt. (Hinweis: das sind zwei Unterplots, ich habe zwei Unterplots erstellt, weil ich Ylabel auf der benachbarten Achse schreiben muss, so ist es eine Anforderung, die ich nicht ändern kann und es muss so sein)

Ich drückte auf das Generate Button, Grafik wird generiert. Ich schloss das Diagramm, und erneut die Schaltfläche "Generieren" gedrückt, aber es ist nicht neu generiert. Bitte schlagen Sie mir vor, was ich hinzufügen kann, um dies zu ermöglichen.

Ist es möglich, jedes Mal einen neuen Graphen zu generieren, wenn der Benutzer die Schaltfläche "Generate" drückt, denke ich, dass dies auch das Problem lösen wird. Bitte vorschlagen und danke im Voraus.

Ich hatte mit diesem Thema in diesem Forum gesucht, und versuchte verschiedene Dinge wie das Löschen der Achse etc etc, aber ich denke, ich mache etwas falsch, wie ich neu zu all dem bin.

Antwort

1

Sie mischen matplotlib.pyplot 's show GUI mit einem anderen PyQt GUI. Das Problem ist, dass die Abbildung, die in der Matplotlib-GUI angezeigt wird, nur einmal erstellt wird. Sobald es geschlossen ist, ist es verloren.

Die einfache Lösung ist es innerhalb der generate_graph Funktion zu erstellen. Dadurch wird bei jedem Drücken der Taste eine neue Figur erstellt und angezeigt.

import sys 
from PyQt5.QtCore import QCoreApplication 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton 

import matplotlib.pyplot as plt 

class window(QMainWindow): 

    def __init__(self): 
     super(window, self).__init__() 
     self.setGeometry(50, 50, 100, 100) 
     self.setWindowTitle('Generate Graph') 
     self.home() 

    def home(self): 
     btn = QPushButton('Generate', self) 
     btn.clicked.connect(self.generate_graph) 
     self.show() 

    def generate_graph(self): 
     fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True) 
     plt.subplots_adjust(hspace=0) 
     x = [0,1,2,3,4,5,6,7,8,9] 
     y1 = [0,1,2,3,4,5,6,7,8,9] 
     y2 = [0,1,2,3,4,5,6,7,8,9] 
     ax1.plot(x,y1) 
     ax2.plot(x,y2) 
     plt.show() 

def run(): 
    app = QApplication(sys.argv) 
    Gui = window() 
    sys.exit(app.exec_()) 

run() 
+0

Danke es funktioniert, auch ich habe dies früher versucht, aber habe einen anderen Fehler gemacht und deshalb zu dieser Zeit meine Anwendung abgestürzt. Vielen dank für Deine Hilfe. –

Verwandte Themen