PyQt5之不规则窗口的显示
函数 | 描述 |
---|---|
setMask(self,QBitmap或QRegion) | setMask()的作用是为调用它的一个控件增加一个遮罩,遮在所选区域以外的部分,使之看起来是透明的。它的参数可以为QBitmap或QRegion对象。 |
paintEvent(self,QPaintEvent) | 通过重载paintEvent()函数绘制窗口背景 |
一、实现可以拖动的不规则窗口
import sys
from PyQt5 import QtCore
from 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 sys
from PyQt5 import QtCore
from 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毫秒改变一次箭头方向。
三、加载GIF动画效果
import sys
from PyQt5 import QtCore
from 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_())
运行效果如下: