2024-05-15 02:41:01 发布
网友
我正在设计一个带有PyQt的图形用户界面,当我单击一个按钮时,我需要显示一个matplotlib/pylab窗口,该按钮用于绘制我创建的函数中的数据。它就像一个在Matlab中使用的运行时。每次按下按钮时,我都想保持matplotlib/pylab窗口作为我的窗口。
PyQt
下面是一个基本示例,它将使用QThread绘制三个不同的示例:
QThread
#!/usr/bin/env python #-*- coding:utf-8 -*- import random from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg from matplotlib.figure import Figure from PyQt4 import QtGui, QtCore class MatplotlibWidget(QtGui.QWidget): def __init__(self, parent=None): super(MatplotlibWidget, self).__init__(parent) self.figure = Figure() self.canvas = FigureCanvasQTAgg(self.figure) self.axis = self.figure.add_subplot(111) self.layoutVertical = QtGui.QVBoxLayout(self) self.layoutVertical.addWidget(self.canvas) class ThreadSample(QtCore.QThread): newSample = QtCore.pyqtSignal(list) def __init__(self, parent=None): super(ThreadSample, self).__init__(parent) def run(self): randomSample = random.sample(range(0, 10), 10) self.newSample.emit(randomSample) class MyWindow(QtGui.QWidget): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self.pushButtonPlot = QtGui.QPushButton(self) self.pushButtonPlot.setText("Plot") self.pushButtonPlot.clicked.connect(self.on_pushButtonPlot_clicked) self.matplotlibWidget = MatplotlibWidget(self) self.layoutVertical = QtGui.QVBoxLayout(self) self.layoutVertical.addWidget(self.pushButtonPlot) self.layoutVertical.addWidget(self.matplotlibWidget) self.threadSample = ThreadSample(self) self.threadSample.newSample.connect(self.on_threadSample_newSample) self.threadSample.finished.connect(self.on_threadSample_finished) @QtCore.pyqtSlot() def on_pushButtonPlot_clicked(self): self.samples = 0 self.matplotlibWidget.axis.clear() self.threadSample.start() @QtCore.pyqtSlot(list) def on_threadSample_newSample(self, sample): self.matplotlibWidget.axis.plot(sample) self.matplotlibWidget.canvas.draw() @QtCore.pyqtSlot() def on_threadSample_finished(self): self.samples += 1 if self.samples <= 2: self.threadSample.start() if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) app.setApplicationName('MyWindow') main = MyWindow() main.resize(666, 333) main.show() sys.exit(app.exec_())
这是来自user1006989(最佳答案)的代码,适用于PyQt5,希望对某些人有用:
下面是使用QThread绘制三个不同示例的基本示例:
#!/usr/bin/env python #-*- coding:utf-8 -*- import random from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg from matplotlib.figure import Figure from PyQt5 import QtCore #conda install pyqt from PyQt5 import QtWidgets class MatplotlibWidget(QtWidgets.QWidget): def __init__(self, parent=None): super(MatplotlibWidget, self).__init__(parent) self.figure = Figure() self.canvas = FigureCanvasQTAgg(self.figure) self.axis = self.figure.add_subplot(111) self.layoutVertical = QtWidgets.QVBoxLayout(self)#QVBoxLayout self.layoutVertical.addWidget(self.canvas) class ThreadSample(QtCore.QThread): newSample = QtCore.pyqtSignal(list) def __init__(self, parent=None): super(ThreadSample, self).__init__(parent) def run(self): randomSample = random.sample(range(0, 10), 10) self.newSample.emit(randomSample) class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self.pushButtonPlot = QtWidgets.QPushButton(self) self.pushButtonPlot.setText("Plot") self.pushButtonPlot.clicked.connect(self.on_pushButtonPlot_clicked) self.matplotlibWidget = MatplotlibWidget(self) self.layoutVertical = QtWidgets.QVBoxLayout(self) self.layoutVertical.addWidget(self.pushButtonPlot) self.layoutVertical.addWidget(self.matplotlibWidget) self.threadSample = ThreadSample(self) self.threadSample.newSample.connect(self.on_threadSample_newSample) self.threadSample.finished.connect(self.on_threadSample_finished) @QtCore.pyqtSlot() def on_pushButtonPlot_clicked(self): self.samples = 0 self.matplotlibWidget.axis.clear() self.threadSample.start() @QtCore.pyqtSlot(list) def on_threadSample_newSample(self, sample): self.matplotlibWidget.axis.plot(sample) self.matplotlibWidget.canvas.draw() @QtCore.pyqtSlot() def on_threadSample_finished(self): self.samples += 1 if self.samples <= 2: self.threadSample.start() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) app.setApplicationName('MyWindow') main = MyWindow() main.resize(666, 333) main.show() sys.exit(app.exec_())
Eli Bendersky编写了一个代码示例,在PyQt中使用matplotlib:http://eli.thegreenplace.net/2009/01/20/matplotlib-with-pyqt-guis/
下面是一个基本示例,它将使用
QThread
绘制三个不同的示例:这是来自user1006989(最佳答案)的代码,适用于PyQt5,希望对某些人有用:
下面是使用QThread绘制三个不同示例的基本示例:
Eli Bendersky编写了一个代码示例,在PyQt中使用matplotlib:http://eli.thegreenplace.net/2009/01/20/matplotlib-with-pyqt-guis/
相关问题 更多 >
编程相关推荐