PyQt5之不规则窗口的显示

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_())

运行效果如下:

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值