2017-12-21 3 views
0

저는 python3.5를 사용합니다. pyqt5에서 matplotlib을 사용하고 싶습니다. 아래 코드를 썼습니다. 그러나 버튼을 보여 주지만 그래프는 표시하지 않습니다. 내가 원하는 좌표로 그래프를 보여주고 싶습니다. 그래서 "레이아웃"명령을 사용하고 싶지 않습니다.pyqt5에서 matplotlib를 사용하고 싶지만 그래프가 표시되지 않습니다

import sys 
from PyQt5 import QtWidgets 

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar 
import matplotlib.pyplot as plt 

import random 

class Window(QtWidgets.QDialog): 
    def __init__(self, parent=None): 
     super().__init__(parent) 

     self.setWindowTitle("グラフ") 
     self.setGeometry(300,300,500,500) 

     self.figure = plt.figure() 
     self.axes = self.figure.add_subplot(111) 
     # We want the axes cleared every time plot() is called 
     self.axes.hold(False) 
     self.canvas = FigureCanvas(self.figure) 
     self.canvas.move(0,0) 


     self.toolbar = NavigationToolbar(self.canvas, self) 
     self.toolbar.hide() 

     # Just some button 
     self.button1 = QtWidgets.QPushButton('Plot',self) 
     self.button1.clicked.connect(self.plot) 
     self.button1.move(0,400) 

    def plot(self): 
     ''' plot some random stuff ''' 
     data = [random.random() for i in range(25)] 
     self.axes.plot(data, '*-') 
     self.canvas.draw() 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 

    main = Window() 
    main.setWindowTitle('Simple QTpy and MatplotLib example with Zoom/Pan') 
    main.show() 

    sys.exit(app.exec_()) 

답변

0

아이, 또는 조상과 같은 주요 위젯이 있어야합니다 그려되고 싶어하고 사례 self.canvas의 위젯은 부모가없는, 그래서 해결책은 setParent() 하나를 전달하는 것입니다 방법 :

class Window(QtWidgets.QDialog): 
    def __init__(self, parent=None): 
     super().__init__(parent) 

     self.setWindowTitle("グラフ") 
     self.setGeometry(300,300,800,500) 

     self.figure = plt.figure() 
     self.axes = self.figure.add_subplot(111) 
     # We want the axes cleared every time plot() is called 
     self.axes.hold(False) 
     self.canvas = FigureCanvas(self.figure) 

     self.canvas.setParent(self) 

     self.canvas.move(100,20) 

     self.toolbar = NavigationToolbar(self.canvas, self) 
     self.toolbar.hide() 

     # Just some button 
     self.button1 = QtWidgets.QPushButton('Plot',self) 
     self.button1.clicked.connect(self.plot) 
     self.button1.move(0,400) 

    def plot(self): 
     ''' plot some random stuff ''' 
     data = [random.random() for i in range(25)] 
     self.axes.plot(data, '*-') 
     self.canvas.draw() 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 

    main = Window() 
    main.setWindowTitle('Simple QTpy and MatplotLib example with Zoom/Pan') 
    main.show() 
+0

고마워요! 코드는 내가 생각한대로 작동합니다. 귀하의 조언은 정확합니다. – toma

관련 문제