最近,帮一个同学的忙制作一个GUI程序。由于他使用到了Python的
matplotlib第三方库,用于显示波形,而使用Duilib内嵌这个界面存在较大的困难,需要加上python的支持,还要内嵌界面,而外界用户与之交互的按钮又涉及到了一定的麻烦,所以最终决定还是使用python来做这个GUI应用程序。
由于之前有过C++Qt的基础,加上简单比较python的几个GUI库,最终决定采用PyQt5库。
本程序采用了Python3进行编写,用了PyQt5、matplotlib、pandas等第三方库,其中有一个小功能是实现实时获取放大当前波形图。
话不多说,首先需要安装第三方库的支持,由于使用pip安装像matplotlib库之类的会比较麻烦,安装后将发现使用的时候会报错,网上也找了很多办法,但大部分都是比较麻烦的,哈哈,博主比较nan,就直接装了anaconda3,里面包含了大部分需要使用到的,具体可以百度这个软件,下载安装,安装后大概会占用1个g的内容。
对于PyQt5,就可以简单地使用pip install PyQt5命令直接安装啦!
安装完后,开始入正题,编写程序:
首先编写matplotlib相关的基础父类
class BaseOscillograph(FigureCanvas): # 定义信号 PosChangeSignal = QtCore.pyqtSignal(int,int) WheelChangSignal = QtCore.pyqtSignal(int) def __init__(self, parent=None, width=5, height=4, dpi=100): self.WheelValue = 0 #Wheel Default Value #Matble实现 fig = Figure(figsize=(width, height), dpi=dpi) self.axes = fig.add_subplot(111) self.axes.hold(False) FigureCanvas.__init__(self, fig) self.setParent(parent) # 设置父窗口,添加入窗口容器 FigureCanvas.setSizePolicy(self,QSizePolicy.Expanding,QSizePolicy.Expanding) FigureCanvas.updateGeometry(self) # 改变样式 self.pixmap = QPixmap("./img/border.png") self.scaledPixmap = self.pixmap.scaled(QSize(100, 100), Qt.KeepAspectRatio) # 定义大小 按比例缩放图片 newCursor = QCursor(self.scaledPixmap, -1, -1) self.setCursor(newCursor) def wheelEvent(self, event): delta = event.angleDelta() oriention = delta.y() / 8 if oriention > 0: self.WheelValue -=10 else: self.WheelValue +=10 #Fix Value if self.WheelValue > 100: self.WheelValue =100 if self.WheelValue <-40: self.WheelValue = -40 self.scaledPixmap = self.pixmap.scaled(QSize(120+self.WheelValue, 120+self.WheelValue), Qt.KeepAspectRatio) newCursor = QCursor(self.scaledPixmap, -1, -1) self.setCursor(newCursor) self.WheelChangSignal.emit(