在这篇PyQt5文章中,我将向您展示如何在PyQt5中嵌入Matplotlib生成的图像。什么是Matplotlib?Matplotlib是一个Python2D绘图库,可以在跨平台交互环境中以各种硬拷贝格式生成具有出版质量的图形。Matplotlib可用于Python脚本、Python和IPythonshell、Jupyter笔记本、Web应用程序服务器和四个GUI工具包。Matplotlib试图让事情变得简单和复杂。只需几行代码,您就可以生成图表、直方图、功率谱、直方图、误差图、散点图等。对于简单的绘图,pyplot模块提供了一个类似matlab的界面,尤其是与IPython结合使用时。对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组函数来完全控制线型、字体属性、轴属性等。安装您可以使用pipinstallmatplotlib简单地安装matplotlib。什么是PyQt5?Qt是一组跨平台C++库,可实现高级API以访问现代桌面和移动系统的许多方面。其中包括位置和位置服务、多媒体、NFC和蓝牙连接、基于Chrome的网络浏览器以及传统的UI开发。PyQt5是用于Qtv5的一套全面的Python绑定。它以超过35个扩展模块的形式实现,使Python能够在包括iOS和Android在内的所有受支持平台上用作C++的替代应用程序开发语言。PyQt5还可以嵌入到基于C++的应用程序中,以允许这些应用程序的用户配置或增强这些应用程序的功能。安装GPL版本的PyQt5可以从PyPI安装:pipinstallPyQt5包括LGPL版本的Qt所需组件的副本。pip还将构建和安装来自sdist包的绑定,但Qt的qmake工具必须在PATH上。sip安装工具还将安装来自sdist包的绑定,但允许您配置安装的许多方面。现在,这里是如何在PyQt5中嵌入Matplotlib以生成图像的完整代码。fromPyQt5.QtWidgetsimportQMainWindow,QApplication,QPushButtonimportsysfrommatplotlib.backends.backend_qt5aggimportFigureCanvasQTAggasFigureCanvasfrommatplotlib.figureimportFigureimportnumpyasnpclassWindow(QMainWindow):def__init__(self):super().__init__()title="在PyQt5中嵌ux入Matplotmi0width=.lin40width"1000height=600self.setWindowTitle(title)self.setGeometry(top,left,width,height)self.MyUI()defMyUI(self):canvas=Canvas(self,width=8,height=4)canvas.move(0,0)button=QPushButton("点击我",self)button.move(100,500)button2=QPushButton("再次点击我",self)button2.move(350,500)classCanvas(FigureCanvas):def__init__(self,parent=None,width=5,height=5,dpi=100):fig=Figure(figsize=(width,height),dpidpi=dpi)self.axes=fig.add_subplot(111)FigureCanvas.__init__(self,fig)self.setParent(父)self.plot()defplot(self):x=np.array([50,30,40,20])labels=["LinuxMi.com","Debian","Linux","Python"]斧=self.figure.add_subplot(111)ax.pie(x,labelslabels=labels)app=QApplication(sys.argv)window=Window()window.show()app.exec()我们导入了需要的库,基本上就是上面的就是我们需要的从PyQt5.QtWidgetsimportQMainWindow,QApplication,QPushButtonimportsysfrommatplotlib.backends.backend_qt5aggimportFigureCanvasQTAggasFigureCanvasfrommatplotlib.figureimportFigureimportnumpyasnp这个是我们的主窗口类。它继承自QMainWindow。我们对窗口的标题和宽度还有一些要求,比如类classWindow(QMainWindow)中调用了MyUI()方法:def__init__(self):super().__init__()title="EmbedMatplotlib-wwwPyQt5中的.linuxmi.com”top=400left=400width=1000height=600self。setWindowTitle(title)self.setGeometry(top,left,width,height)self.MyUI()在此方法中,我们创建了一个带有两个QPushButton的画布。defMyUI(self):canvas=Canvas(self,width=8,height=4)canvas.move(0,0)button=QPushButton("点我",self)button.move(100,500)button2=QPushButton("再次Clickonme",self)button2.move(350,500)这就是我们的Canvas类,它继承自FigureCanvas。classCanvas(FigureCanvas):def__init__(self,parent=None,width=5,height=5,dpi=100):fig=Figure(figsize=(width,height),dpidpi=dpi)self.axes=fig.add_subplot(111)FigureCanvas.__init__(self,fig)self.setParent(parent)self.plot()这里我们还要在PyQt5窗口中绘制饼图。defplot(self):x=np.array([50,30,40,20])labels=["LinuxMi.com","Debian","Linux","Python"]ax=self.figure.add_subplot(111)ax.pie(x,labelslabels=labels)所以在这里,每个PyQt5应用程序都必须创建一个应用程序对象。sys.argv参数是命令行的参数列表。app=QApplication(sys.argv)最后,我们进入应用程序的主循环。事件处理从这里开始。主循环从窗口系统接收事件并将它们分派给应用程序小部件。app.exec()sys.exit()运行完整代码,结果如下:
