2017-12-21 38 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()に1を渡すことです方法:

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

関連する問題