python无法显示动图_python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例...

PyQt5不规则窗口实现动画效果实例

import sys

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtWidgets import *

class ShapeWidget(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()

#显示不规则图片

def mypix(self):

self.update()

if self.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

def mousePressEvent(self, QMouseEvent):

if QMouseEvent.button()==Qt.LeftButton:

self.m_drag=True

self.m_DragPosition=QMouseEvent.globalPos()-self.pos()

QMouseEvent.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=False

self.setCursor(QCursor(Qt.ArrowCursor))

def paintEvent(self, QPaintEvent):

painter=QPainter(self)

painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix)

def mouseDoubleClickEvent(self, QMouseEvent):

if QMouseEvent.button()==1:

self.i+=1

self.mypix()

def timeChanged(self):

self.i+=1

self.mypix()

if __name__ == '__main__':

app=QApplication(sys.argv)

form=ShapeWidget()

form.show()

sys.exit(app.exec_())

运行程序,效果如下

20203984102295.png

20203984113662.png

20203984119994.png

代码分析

运行这个例子,会弹出一个窗口,显示不同方向的箭头,每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动画实例

import sys

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtWidgets import *

class 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('./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_())

运行效果

20203984123030.png

本文主要讲解了PyQt5实现窗口动画的两种方法,推荐第2种PyQt5加载显示GIF动画方法,想了解更多关于PyQt5窗口知识请查看下面的相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个Python GUIPyQt5中QComboBox控件的使用方法实例: QComboBox是PyQt5中的一个下拉列表框控件,可以方便地在图形界面实现下拉列表框功能。以下是QComboBox控件的详细使用方法实例: 1. 在PyQt5中导入QComboBox控件: ``` python from PyQt5.QtWidgets import QComboBox ``` 2. 创建一个QComboBox控件对象: ``` python combo_box = QComboBox() ``` 3. 添加下拉列表框选项: 可以通过addItem()方法添加下拉列表框选项,也可以在创建QComboBox控件时直接传入选项列表: ``` python combo_box.addItem('选项1') combo_box.addItem('选项2') combo_box.addItem('选项3') # 或者 options = ['选项1', '选项2', '选项3'] combo_box = QComboBox(self) combo_box.addItems(options) ``` 4. 获取当前选中的选项: 可以通过currentIndex()方法获取当前选中的选项的索引值,也可以通过currentText()方法获取当前选中的选项的文本内容: ``` python index = combo_box.currentIndex() text = combo_box.currentText() ``` 5. 为下拉列表框添加事件: 可以为下拉列表框添加事件,例如选项改变时触发事件。可以通过currentIndexChanged()方法实现: ``` python combo_box.currentIndexChanged.connect(self.on_combo_box_changed) def on_combo_box_changed(self, index): # index为当前选中的选项的索引值 print(index) ``` 下面是一个完整的例子: ``` python from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QComboBox, QVBoxLayout import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('QComboBox控件使用例子') self.setGeometry(300, 300, 300, 200) label = QLabel('请选择一项:', self) combo_box = QComboBox(self) combo_box.addItem('选项1') combo_box.addItem('选项2') combo_box.addItem('选项3') combo_box.currentIndexChanged.connect(self.on_combo_box_changed) layout = QVBoxLayout() layout.addWidget(label) layout.addWidget(combo_box) self.setLayout(layout) self.show() def on_combo_box_changed(self, index): print(index) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 该例子创建了一个窗口,包含一个QLabel控件和一个QComboBox控件,当选项改变时会触发on_combo_box_changed()方法。当选项改变时,会在控制台输出当前选中的选项的索引值。 希望这个例子能够帮助你理解使用PyQt5中的QComboBox控件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值