2017-03-25 110 views
0

我正在使用PyQt5爲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() 

所以我張貼的樣本程序,它可以顯示我的問題,在此我創建了一個按鈕,生成的兩個地塊。 (注:這是兩個子圖,我創建了兩個子圖,因爲我需要在相鄰的軸上寫ylabel,所以這是一個要求我不能改變,它必須是這樣的)

我按下了生成按鈕,圖形生成。 我關閉了圖表,並再次按下了生成按鈕,但沒有重新生成。 請建議我可以添加什麼來實現這一點。

是否有可能生成新的圖每次用戶按下生成按鈕,我認爲這也將解決問題。 請提前建議並提前致謝。

我已經在這個論壇上搜索過這個主題,並嘗試過各種東西,如清理軸等等,但我認爲我做錯了什麼,因爲我對所有這些都是新的。

回答

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

由於它的作品,即使我想這較早,但做了一些其他的錯誤,這就是爲什麼在那個時候我的應用程序崩潰。非常感謝你的幫助。 –