- 51
- 0
下面的代码可以工作-- coding: utf-8 --"""【简介】使用paintEvent在窗口实现划线例子"""import sysfrom PyQt5.QtWidgets import QApplication ,QWidget from PyQt5.QtGui import QPainter ,QPixmap,QPenfrom PyQt5.QtCore import Qt , QPointclass Winform(QWidget):def __init__(self,parent=None): super(Winform,self).__init__(parent) self.setWindowTitle("绘图例子") self.pix = QPixmap() # 实例化一个 QPixmap 对象 self.lastPoint = QPoint() # 起始点 self.endPoint = QPoint() #终点 self.initUi() self.bline=0 def initUi(self): #窗口大小设置为600*500 self.resize(600, 500) # 画布大小为400*400,背景为白色 self.pix = QPixmap(400, 400) self.pix.fill(Qt.white)# 重绘的复写函数 主要在这里绘制def paintEvent(self, event): pp = QPainter(self.pix) pen = QPen() # 定义笔格式对象 pen.setWidth(10) # 设置笔的宽度 pp.setPen(pen) #将笔格式赋值给 画笔 # 根据鼠标指针前后两个位置绘制直线 pp.drawLine(self.lastPoint, self.endPoint) # 让前一个坐标值等于后一个坐标值, # 这样就能实现画出连续的线 #self.lastPoint = self.endPoint painter = QPainter(self) painter.drawPixmap(0, 0, self.pix) # 在画布上画出'''#鼠标按压事件def mousePressEvent(self, event) : # 鼠标左键按下 if event.button() == Qt.LeftButton : self.lastPoint = event.pos() self.endPoint = self.lastPoint''''''# 鼠标移动事件def mouseMoveEvent(self, event): # 鼠标左键按下的同时移动鼠标 if event.buttons() and Qt.LeftButton : self.endPoint = event.pos() #进行重新绘制 self.update()'''# 鼠标释放事件def mouseReleaseEvent( self, event): # 鼠标左键释放 if event.button() == Qt.LeftButton : ''' self.endPoint = event.pos() #进行重新绘制 self.update() ''' if self.bline==0: self.lastPoint = event.pos() self.bline=1 else: self.endPoint = event.pos() self.bline=0 #进行重新绘制 self.update() if name == "__main__":app = QApplication(sys.argv) form = Winform()form.show()sys.exit(app.exec_()) 下面的代码没有达到我想要的效果,希望鼠标移动时临时显示画线-- coding: utf-8 --"""【简介】使用paintEvent在窗口实现划线例子"""import sysfrom PyQt5.QtWidgets import QApplication ,QWidget from PyQt5.QtGui import QPainter ,QPixmap,QPenfrom PyQt5.QtCore import Qt , QPointclass Winform(QWidget):def __init__(self,parent=None): super(Winform,self).__init__(parent) self.setWindowTitle("绘图例子") self.pix = QPixmap() # 实例化一个 QPixmap 对象 self.pix2 = QPixmap() # 实例化一个 QPixmap 对象 self.lastPoint = QPoint() # 起始点 self.endPoint = QPoint() #终点 self.endPoint2 = QPoint() #终点 self.initUi() self.bline=0 def initUi(self): #窗口大小设置为600*500 self.resize(600, 500) # 画布大小为400*400,背景为白色 self.pix = QPixmap(400, 400) self.pix.fill(Qt.white)# 重绘的复写函数 主要在这里绘制def paintEvent(self, event): if self.bline: pp = QPainter(self.pix2) pen = QPen() # 定义笔格式对象 pen.setWidth(3) # 设置笔的宽度 #pen.setColor(Red) # 设置笔 pp.setPen(pen) #将笔格式赋值给 画笔 # 根据鼠标指针前后两个位置绘制直线 pp.drawLine(self.lastPoint, self.endPoint2) # 让前一个坐标值等于后一个坐标值, # 这样就能实现画出连续的线 #self.lastPoint = self.endPoint painter = QPainter(self) painter.drawPixmap(0, 0, self.pix2) # 在画布上画出 else: pp = QPainter(self.pix) pen = QPen() # 定义笔格式对象 pen.setWidth(3) # 设置笔的宽度 pp.setPen(pen) #将笔格式赋值给 画笔 # 根据鼠标指针前后两个位置绘制直线 pp.drawLine(self.lastPoint, self.endPoint) # 让前一个坐标值等于后一个坐标值, # 这样就能实现画出连续的线 #self.lastPoint = self.endPoint painter = QPainter(self) painter.drawPixmap(0, 0, self.pix) # 在画布上画出'''#鼠标按压事件def mousePressEvent(self, event) : # 鼠标左键按下 if event.button() == Qt.LeftButton : self.lastPoint = event.pos() self.endPoint = self.lastPoint'''# 鼠标移动事件def mouseMoveEvent(self, event): if self.bline : self.endPoint2 = event.pos() #进行重新绘制 self.update() ''' # 鼠标左键按下的同时移动鼠标 if event.buttons() and Qt.LeftButton : self.endPoint = event.pos() #进行重新绘制 self.update()'''# 鼠标释放事件def mouseReleaseEvent( self, event): # 鼠标左键释放 if event.button() == Qt.LeftButton : ''' self.endPoint = event.pos() #进行重新绘制 self.update() ''' if self.bline==0: self.lastPoint = event.pos() self.bline=1 else: self.endPoint = event.pos() self.bline=0 #进行重新绘制 self.update() if name == "__main__":app = QApplication(sys.argv) form = Winform()form.show()sys.exit(app.exec_())
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

