2017-03-25 1 views
0

저는 Pypltlib 패키지를 사용하여 그래프를 생성하는 GUI 응용 프로그램에서 작업하고 있습니다. GUI 디자인에서는 PyQt5를 사용하고 있습니다. 이 응용 프로그램에서는 사용자가 줄에서 데이터를로드 한 다음 생성 단추를 누르면 처리 된 그래프가 생성됩니다. 이제는 그래프를 닫을 때 사용자가 새 데이터를로드하고 생성 단추, 그래프를 누르면 문제가 발생합니다 다시 표시되지 않습니다.버튼 클릭으로 Matplotlib을 사용하여 생성 된 그래프 업데이트

코드

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() 

그래서 내가 버튼을 만들어 두 개의 플롯을 생성이에, 내 문제를 보여줄 수있는 샘플 프로그램을 게시하고있다. (참고 :이 두 가지 subplots, 나는 인접한 축에 ylabel 쓸 필요가 있기 때문에 나는 그것을 변경할 수없고이 같은 있어야합니다) 두 subplots 만들었습니다.

내가 생성 한 버튼을 클릭하면 그래프가 생성됩니다. 그래프를 닫은 다음 생성 버튼을 다시 눌렀지만 다시 생성되지 않았습니다. 이 문제를 해결하기 위해 추가 할 수있는 내용을 제안하십시오.

사용자가 생성 버튼을 누를 때마다 새 그래프를 생성 할 수 있습니까? 문제가 해결 될 것이라고 생각합니다. 사전에 제안하고 감사하십시오.

이 포럼에서이 주제로 검색해 보았지만 축 등을 지우는 것과 같은 여러 가지 시도를 해봤지만이 모든 것을 처음 접했을 때 내가 잘못 생각하고 있다고 생각합니다.

답변

1

matplotlib.pyplotshow GUI와 다른 PyQt GUI를 혼합하고 있습니다. 문제는 matplotlib GUI에 표시 할 숫자가 한 번만 생성된다는 것입니다. 그것이 닫히 자마자, 그것은 길을 잃었다.

간단한 해결책은 generate_graph 함수 내에서 만드는 것입니다. 따라서 버튼을 누를 때마다 새로운 그림이 만들어지고 표시됩니다.

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

감사합니다. 이전에도 사용해 보았지만 다른 실수를 저 지르므로 저의 응용 프로그램이 충돌했습니다. 도와 주셔서 정말로 고맙습니다. –

관련 문제