python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
PyQt5不规则窗口实现动画效果实例
importsys
fromPyQt5.QtCoreimport*
fromPyQt5.QtGuiimport*
fromPyQt5.QtWidgetsimport*
classShapeWidget(QWidget):
def__init__(self,parent=None):
super(ShapeWidget,self).__init__(parent)
self.i=1
self.mypix()
self.timer=QTimer()
self.timer.setInterval(500)
self.timer.timeout.connect(self.timeChanged)
self.timer.start()
#显示不规则图片
defmypix(self):
self.update()
ifself.i==5:
self.i=1
self.mypic={1:'./images/left.png',2:'./images/up.png',3:'./images/right.png',4:'./images/down.png'}
self.pix=QPixmap(self.mypic[self.i],'0',Qt.AvoidDither|Qt.ThresholdAlphaDither|Qt.ThresholdDither)
self.resize(self.pix.size())
self.setMask(self.pix.mask())
self.dragPosition=None
defmousePressEvent(self,QMouseEvent):
ifQMouseEvent.button()==Qt.LeftButton:
self.m_drag=True
self.m_DragPosition=QMouseEvent.globalPos()-self.pos()
QMouseEvent.accept()
self.setCursor(QCursor(Qt.OpenHandCursor))
defmouseMoveEvent(self,QMouseEvent):
ifQt.LeftButtonandself.m_drag:
self.move(QMouseEvent.globalPos()-self.m_DragPosition)
QMouseEvent.accept()
defmouseReleaseEvent(self,QMouseEvent):
self.m_drag=False
self.setCursor(QCursor(Qt.ArrowCursor))
defpaintEvent(self,QPaintEvent):
painter=QPainter(self)
painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix)
defmouseDoubleClickEvent(self,QMouseEvent):
ifQMouseEvent.button()==1:
self.i+=1
self.mypix()
deftimeChanged(self):
self.i+=1
self.mypix()
if__name__=='__main__':
app=QApplication(sys.argv)
form=ShapeWidget()
form.show()
sys.exit(app.exec_())
运行程序,效果如下
代码分析
运行这个例子,会弹出一个窗口,显示不同方向的箭头,每0.5秒改变一次方向
pixmap.setMask()函数的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的地方,使控件看起来是透明的,它的参数是一个QBitmap对象或一个QRegion对象
本例中调用QPixmap实例的self.pix.mask()函数获得图片自身的遮罩,这个遮罩是一个QBitmap对象
self.pix=QPixmap(self.mypic[self.i],'0',Qt.AvoidDither|Qt.ThresholdAlphaDither|Qt.ThresholdDither)
self.resize(self.pix.size())
self.setMask(self.pix.mask())
paintEvent()函数每次初始化窗口时只调用一次,所以没加载一次图片就要重新调用一次paintEvent()函数,即在更新窗口时调用这个函数,更新窗口的核心代码如下
self.timer=QTimer()
self.timer.setInterval(500)
self.timer.timeout.connect(self.timeChanged)
self.timer.start()
当定时器的时间到期后更新窗口代码
self.update
PyQt5加载GIF动画实例
importsys
fromPyQt5.QtCoreimport*
fromPyQt5.QtGuiimport*
fromPyQt5.QtWidgetsimport*
classLoadingGifWin(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('./images/loading.gif')
self.label.setMovie(self.movie)
self.movie.start()
if__name__=='__main__':
app=QApplication(sys.argv)
load=LoadingGifWin()
load.show()
sys.exit(app.exec_())
运行效果
本文主要讲解了PyQt5实现窗口动画的两种方法,推荐第2种PyQt5加载显示GIF动画方法,想了解更多关于PyQt5窗口知识请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。