我使用python3.5。我想在pyqt5中使用matplotlib,我写下面的代码。但是虽然它显示了按钮,但它没有显示图形。我希望在我希望的坐标中显示图形。所以,我不想使用“layout”命令。
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 :(得分: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()