本文共 4200 字,大约阅读时间需要 14 分钟。
函数 | 描述 |
---|---|
setMask(self,QBitmap或QRegion) | setMask()的作用是为调用它的一个控件增加一个遮罩,遮在所选区域以外的部分,使之看起来是透明的。它的参数可以为QBitmap或QRegion对象。 |
paintEvent(self,QPaintEvent) | 通过重载paintEvent()函数绘制窗口背景 |
import sysfrom PyQt5 import QtCorefrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class Demo(QWidget): def __init__(self): super().__init__() self.setWindowTitle('实现可以拖动的不规则窗口') self.mypix() #显示不规则图片 def mypix(self): self.mypic = 'python.jpg' self.pix = QPixmap(self.mypic,'0',Qt.AvoidDither | Qt.ThresholdDither | Qt.ThresholdAlphaDither) self.resize(self.pix.size()) self.setMask(self.pix.mask()) self.dragPosition = None def mousePressEvent(self, event): #当鼠标左键按下时 if event.button() == Qt.LeftButton: self.m_drag = True self.m_dragPosition = event.globalPos() - self.pos() event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) def mouseMoveEvent(self, event): #当鼠标左键移动时 if self.m_drag and Qt.LeftButton: self.move(QMouseEvent.globalPos() - self.m_dragPosition) #修改偏移值 QMouseEvent.accept() def mouseReleaseEvent(self, event): #当鼠标左键释放时 self.m_drag = False self.setCursor(QCursor(Qt.ArrowCursor)) def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix) def mouseDoubleClickEvent(self, event): #鼠标双击 self.mypix()if __name__ == "__main__": app = QApplication(sys.argv) form = Demo() form.show() sys.exit(app.exec_())
import sysfrom PyQt5 import QtCorefrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class Demo(QWidget): def __init__(self): super().__init__() self.setWindowTitle('不规则窗口实现动画效果') self.i = 1 self.mypix() self.timer = QTimer() self.timer.setInterval(500) #设置定时器,每500毫秒更新一次 self.timer.timeout.connect(self.timeChange) self.timer.start() #显示不规则图片 def mypix(self): self.update() if self.i ==5: self.i = 1 self.mypic = { 1:'left.png',2:'up.png',3:'right.png',4:'down.png'} self.pix = QPixmap(self.mypic[self.i],'0',Qt.AvoidDither | Qt.ThresholdDither | Qt.ThresholdAlphaDither) self.resize(self.pix.size()) self.setMask(self.pix.mask()) self.dragPosition = None def mousePressEvent(self, event): #当鼠标左键按下时 if event.button() == Qt.LeftButton: self.m_drag = True self.m_dragPosition = event.globalPos() - self.pos() event.accept() self.setCursor(QCursor(Qt.OpenHandCursor)) def mouseMoveEvent(self, event): #当鼠标左键移动时 if self.m_drag and Qt.LeftButton: self.move(QMouseEvent.globalPos() - self.m_dragPosition) #修改偏移值 QMouseEvent.accept() def mouseReleaseEvent(self, event): #当鼠标左键释放时 self.m_drag = False self.setCursor(QCursor(Qt.ArrowCursor)) def paintEvent(self, event): painter = QPainter(self) painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix) def mouseDoubleClickEvent(self, event): #鼠标双击 if event.button() == 1: self.i += 1 self.mypix() def timeChange(self): #每500毫秒窗口执行一次更新操作,重绘窗口 self.i += 1 self.mypix()if __name__ == "__main__": app = QApplication(sys.argv) form = Demo() form.show() sys.exit(app.exec_())
运行之后,会弹出一个窗口,显示不同方向的箭头,每500毫秒改变一次箭头方向。
import sysfrom PyQt5 import QtCorefrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class Demo(QMainWindow): def __init__(self): super().__init__() self.label = QLabel('',self) self.label.move(50,50) self.setFixedSize(128,128) self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint) self.movie = QMovie('biaoqingbao.gif') self.label.setMovie(self.movie) self.movie.start()if __name__ == "__main__": app = QApplication(sys.argv) form = Demo() form.show() sys.exit(app.exec_())
运行效果如下:
转载地址:http://kxozi.baihongyu.com/