博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyQt5之不规则窗口的显示
阅读量:3958 次
发布时间:2019-05-24

本文共 4200 字,大约阅读时间需要 14 分钟。

PyQt5之不规则窗口的显示

函数 描述
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毫秒改变一次箭头方向。

三、加载GIF动画效果

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/

你可能感兴趣的文章
POJ3728,The merchant(倍增LCA+分治)
查看>>
2019 ICPC Malaysia National,E. Optimal Slots(01背包变形)
查看>>
洛谷P1638 逛画展(双向队列)
查看>>
牛客练习赛51,D(二分图匹配)
查看>>
POJ2892,Tunnel Warfare(线段树维护连续区间)
查看>>
POJ3468,A Simple Problem with Integers(线段树-区间查询-区间更新)
查看>>
快速幂(递归)
查看>>
CodeForces 1101A Minimum Integer(思维)
查看>>
CodeForces 1102A Integer Sequence Dividing(思维)
查看>>
CodeForces 1087B Div Times Mod(思维)
查看>>
杭电ACM——4310,Hero(贪心)
查看>>
杭电ACM——1789,Doing Homework Again(贪心)
查看>>
北大ACM——2782,Bin Packing(贪心)
查看>>
北大ACM——4014,Dice(贪心)
查看>>
杭电ACM——4864,Task(贪心)
查看>>
北大ACM——3176,Cow Bowling(动态规划)
查看>>
北大ACM——2229,Sumsets(DP或思维)
查看>>
北大ACM——3186,Treats For The Cows(DP)
查看>>
杭电ACM——蝎子搬新家(贪心)
查看>>
杭电ACM——处理木棍(贪心)
查看>>