2017-03-25 3 views
0

私はPyplusを使用していますが、guiの設計のためにMatplotlibパッケージを使用してグラフを生成するGUIアプリケーションに取り組んでいます。 このアプリケーションでは、ユーザーが行からデータをロードし、生成ボタンを押すと、処理されたグラフが生成されます。グラフを閉じるときに、ユーザーが新しいデータをロードし、生成ボタン再度表示されません。ボタンをクリックして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() 

だから、私はボタンを作成し、二つのグラフを生成し、この中で、私の問題を表示することができますサンプルプログラムを掲載しています。 (注:これらは2つのサブプロットです。隣接する軸にylabelを書く必要があるため、私は2つのサブプロットを作成しました。変更することはできず、このようにする必要があります)

私はgenerateボタンを押すと、グラフが生成されます。 私はグラフを閉じ、再び生成ボタンを押しましたが、再生成されません。 これを実現するために追加できるものを教えてください。

毎回新しいグラフを生成することは可能ですか?ユーザーが生成ボタンを押すと、これも問題を解決すると思います。 事前にお申し付けいただきありがとうございます。

私はこのフォーラムでこのトピックを検索し、軸などをクリアするようなさまざまなことを試みましたが、私はこれに新しいものとして何か間違っていると思います。

答えて

1

matplotlib.pyplotshow GUIと別のPyQt GUIを混在させています。問題は、matplotlib GUIに表示される図形が1回だけ作成されることです。それが閉じられるとすぐに、それは失われます。

単純な解決策は、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

私はこれを以前に試しても機能しますが、他の間違いがありました。そのため、その時点でアプリケーションがクラッシュしました。あなたの助けに感謝します。 –

関連する問題