python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
在PyQt中常用的图像类有四种,QPixmap,QImage,QPicture,QBitmap
简单绘图板实例
#-*-coding:utf-8-*-
importsys
fromPyQt5.QtWidgetsimportQApplication,QWidget
fromPyQt5.QtGuiimportQPainter,QPixmap
fromPyQt5.QtCoreimportQt,QPoint
classWinform(QWidget):
def__init__(self,parent=None):
super(Winform,self).__init__(parent)
#设置标题
self.setWindowTitle("绘图例子")
#实例化QPixmap类
self.pix=QPixmap()
#起点,终点
self.lastPoint=QPoint()
self.endPoint=QPoint()
#初始化
self.initUi()
definitUi(self):
#窗口大小设置为600*500
self.resize(600,500)
#画布大小为400*400,背景为白色
self.pix=QPixmap(400,400)
self.pix.fill(Qt.white)
defpaintEvent(self,event):
pp=QPainter(self.pix)
#根据鼠标指针前后两个位置绘制直线
pp.drawLine(self.lastPoint,self.endPoint)
#让前一个坐标值等于后一个坐标值,
#这样就能实现画出连续的线
self.lastPoint=self.endPoint
painter=QPainter(self)
#绘制画布到窗口指定位置处
painter.drawPixmap(0,0,self.pix)
defmousePressEvent(self,event):
#鼠标左键按下
ifevent.button()==Qt.LeftButton:
self.lastPoint=event.pos()
self.endPoint=self.lastPoint
defmouseMoveEvent(self,event):
#鼠标左键按下的同时移动鼠标
ifevent.buttons()andQt.LeftButton:
self.endPoint=event.pos()
#进行重新绘制
self.update()
defmouseReleaseEvent(self,event):
#鼠标左键释放
ifevent.button()==Qt.LeftButton:
self.endPoint=event.pos()
#进行重新绘制
self.update()
if__name__=="__main__":
app=QApplication(sys.argv)
form=Winform()
form.show()
sys.exit(app.exec_())
运行效果图如下
代码分析
在这个例子中,实现了简单的绘图功能,按住鼠标左键在画板上进行绘制,释放鼠标左键结束绘图
第一组代码:初始化代码
#实例化QPixmap类
self.pix=QPixmap()
#起点,终点
self.lastPoint=QPoint()
self.endPoint=QPoint()
#初始化
self.initUi()
第二组代码:重构paintEvent()函数
defpaintEvent(self,event):
pp=QPainter(self.pix)
#根据鼠标指针前后两个位置绘制直线
pp.drawLine(self.lastPoint,self.endPoint)
#让前一个坐标值等于后一个坐标值,
#这样就能实现画出连续的线
self.lastPoint=self.endPoint
painter=QPainter(self)
#绘制画布到窗口指定位置处
painter.drawPixmap(0,0,self.pix)
第三组代码:重构mousePressEvent()函数,使用两个点来绘制线条,这两个点从下面的鼠标事件中获取
defmousePressEvent(self,event):
#鼠标左键按下
ifevent.button()==Qt.LeftButton:
self.lastPoint=event.pos()
self.endPoint=self.lastPoint
第四组代码:重构mouseMoveEvent()函数,当鼠标左键把按下时获得开始点,每次绘制,都让结束点和开始点重合,这样确保这两个点的值都是预期值
defmouseMoveEvent(self,event):
#鼠标左键按下的同时移动鼠标
ifevent.buttons()andQt.LeftButton:
self.endPoint=event.pos()
#进行重新绘制
self.update()
第五组代码:重构mouseReleaseEvent()函数,当鼠标指针移动时获得结束点,并更新绘制,注意,这里的button()函数可以获取在鼠标指针移动过程中按下的所有按键,然后用Qt.LeftButton来判断是否按下了左键,在mouseMoveEvent()中必须使用该函数来判断按下的鼠标按键,最后调用update()函数,会执行paintEvent()函数进行重新绘制
defmouseReleaseEvent(self,event):
#鼠标左键释放
ifevent.button()==Qt.LeftButton:
self.endPoint=event.pos()
#进行重新绘制
self.update()
当释放鼠标时,也会进行绘制,现在运行程序,按下鼠标左键在白色画布上进行绘制,实现了简单的涂鸦板功能
本文介绍了PyQt5利用QPixmap,QImage,QPicture,QBitmap实现简单画板的实例,更多关于PyQt5图形图像知识请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。