PyQt5 不规则窗口的显示
创始人
2024-03-08 05:13:13
0

PyQt5 不规则窗口的显示

  • QPixmap和QBitmap绘图的效果对比
  • 不可以拖动的不规则窗口
  • 可以拖动的不规则窗口
  • 不规则窗口实现动画效果
  • 加载GIF动画效果

函数描述
setMask(self, QBitmap)
setMask(self, QRegion)
setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分,使之看起来是透明的。它的参数可以为QBitmap或QRegion对象。
paintEvent(self, QPaintEvent)通过重载paintEvent()函数绘制窗口背景

QPixmap和QBitmap绘图的效果对比

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QBitmapclass MyForm(QWidget):def __init__(self, parent=None):super(MyForm, self).__init__(parent)self.setWindowTitle("不规则窗口的实现例子")def paintEvent(self, event):painter = QPainter(self)painter.drawPixmap(0, 0, 280, 390, QPixmap(r"./pyqt5/images/dog.jpg"))painter.drawPixmap(300, 0, 280, 390, QBitmap(r"./pyqt5/images/dog.jpg"))if __name__ == "__main__":app = QApplication(sys.argv)form = MyForm()form.show()sys.exit(app.exec_())

在这里插入图片描述

不可以拖动的不规则窗口

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QBitmapclass WinForm(QWidget):def __init__(self, parent=None):super(WinForm, self).__init__(parent)self.setWindowTitle("不规则窗口的实现例子")self.pix = QBitmap("./pyqt5/images/mask.png")self.resize(self.pix.size())self.setMask(self.pix)def paintEvent(self, event):painter = QPainter(self)# 在指定区域直接绘制窗口背景painter.drawPixmap(0, 0, self.pix.width(), self.pix.height(), QPixmap("./pyqt5/images/screen1.jpg"))if __name__ == "__main__":app = QApplication(sys.argv)win = WinForm()win.show()sys.exit(app.exec_())

在这里插入图片描述

可以拖动的不规则窗口

import sys
from PyQt5.QtWidgets import QApplication  ,QWidget 
from PyQt5.QtGui import  QPixmap,   QPainter  ,  QCursor , QBitmap
from PyQt5.QtCore import Qt class ShapeWidget(QWidget):  def __init__(self,parent=None):  super(ShapeWidget,self).__init__(parent)self.setWindowTitle("不规则的,可以拖动的窗体实现例子") self.mypix()	# 显示不规则 picdef mypix(self):self.pix = QBitmap( "./pyqt5/images/mask.png" )self.resize(self.pix.size())       self.setMask(self.pix)print( self.pix.size())self.dragPosition = None# 重定义鼠标按下响应函数mousePressEvent(QMouseEvent)和鼠标移动响应函数mouseMoveEvent(QMouseEvent),使不规则窗体能响应鼠标事件,随意拖动。def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.m_drag=Trueself.m_DragPosition=event.globalPos()-self.pos()event.accept()self.setCursor(QCursor(Qt.OpenHandCursor))if event.button()==Qt.RightButton:  self.close()  def mouseMoveEvent(self, QMouseEvent):if Qt.LeftButton and self.m_drag:# 当左键移动窗体修改偏移值self.move(QMouseEvent.globalPos()- self.m_DragPosition )QMouseEvent.accept()def mouseReleaseEvent(self, QMouseEvent):self.m_drag=Falseself.setCursor(QCursor(Qt.ArrowCursor))#一般 paintEvent 在窗体首次绘制加载, 要重新加载paintEvent 需要重新加载窗口使用 self.update() or  self.repaint()    def paintEvent(self, event):painter = QPainter(self)painter.drawPixmap(0,0,self.width(),self.height(),QPixmap("./pyqt5/images/boy.png"))if __name__ == '__main__':app=QApplication(sys.argv)form=ShapeWidget()form.show()app.exec_()

在这里插入图片描述

不规则窗口实现动画效果

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QCursor
from PyQt5.QtCore import Qt, QTimerclass ShapeWidget(QWidget):def __init__(self, parent=None):super(ShapeWidget, self).__init__(parent)self.i = 1self.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 = 1self.mypic = {1:'./pyqt5/images/left.png', 2:'./pyqt5/images/up.png', 3:'./pyqt5/images/right.png', 4:'./pyqt5/images/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 = Nonedef mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.m_drag = Trueself.m_DragPosition = event.globalPos() - self.pos()event.accept()self.setCursor(QCursor(Qt.OpenHandCursor))def mouseMoveEvent(self, QMouseEvent):if Qt.LeftButton and self.m_drag:self.move(QMouseEvent.globalPos() - self.m_DragPosition)QMouseEvent.accept()def mouseReleaseEvent(self, QMouseEvent):self.m_drag = Falseself.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 += 1self.mypix()def timeChange(self):self.i += 1self.mypix()if __name__ == "__main__":app = QApplication(sys.argv)win = ShapeWidget()win.show()sys.exit(app.exec_())

在这里插入图片描述

加载GIF动画效果

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QWidget
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QMovieclass LoadingGifWin(QWidget):def __init__(self, parent=None):super(LoadingGifWin, self).__init__(parent)self.label = QLabel('', self)self.setFixedSize(128, 128)        self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint)self.movie = QMovie("./pyqt5/images/loading.gif")self.label.setMovie(self.movie)self.movie.start()if __name__ == "__main__":app = QApplication(sys.argv)win = LoadingGifWin()win.show()sys.exit(app.exec_())

在这里插入图片描述

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...