RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1325721
Accepted
Никита Пфейфер
Никита Пфейфер
Asked:2022-09-06 05:38:23 +0000 UTC2022-09-06 05:38:23 +0000 UTC 2022-09-06 05:38:23 +0000 UTC

如何制作动画,标签图像外观平滑?

  • 772

如何使图像label逐渐(平滑)出现。

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow10(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(492, 613)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setStyleSheet("#centralwidget{\n"
"background-color: rgb(0, 0, 0);\n"
"}")
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setStyleSheet("QFrame {\n"
"background-color: rgb(0, 0, 0);\n"
"color: rgb(220, 220, 220);\n"
"border-radius: 10px\n"
"\n"
"}")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.progressBar = QtWidgets.QProgressBar(self.frame)
        self.progressBar.setGeometry(QtCore.QRect(156, 530, 161, 21))
        self.progressBar.setStyleSheet("QProgressBar{\n"
"background-color: rgb(98, 114, 164);\n"
"color: rgb(200, 200, 200);\n"
"border-style:  none;\n"
"\n"
"\n"
"text-align: center\n"
"}\n"
"\n"
"QProgressBar::chunk{\n"
"\n"
"border-radius: 10 px;\n"
"    background-color: rgb(255, 255, 255);\n"
"}")
        self.progressBar.setProperty("value", 24)
        self.progressBar.setAlignment(QtCore.Qt.AlignCenter)
        self.progressBar.setObjectName("progressBar")
        self.label_4 = QtWidgets.QLabel(self.frame)
        self.label_4.setGeometry(QtCore.QRect(300, 560, 181, 31))
        font = QtGui.QFont()
        font.setPointSize(14)
        self.label_4.setFont(font)
        self.label_4.setStyleSheet("color: rgb(98, 114, 164);")
        self.label_4.setObjectName("label_4")
        self.label_3 = QtWidgets.QLabel(self.frame)
        self.label_3.setGeometry(QtCore.QRect(20, 0, 431, 291))
        self.label_3.setText("")
        self.label_3.setPixmap(QtGui.QPixmap("Изображения/bb.jpg"))
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(42, 274, 391, 231))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("Изображения/ggg.jpg"))
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.frame)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_4.setText(_translate("MainWindow", "<strong>Created</strong>: Nanoxia"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow10()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

在此处输入图像描述

这是主文件中的类,但图片仍然不流畅

counter = 0 
class SplashScreen(QtWidgets.QMainWindow, Ui_MainWindow10):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow10()
        self.ui.setupUi(self)

    ## Remove Title Bar
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

    ##Drop shadow Effect
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(20)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 0, 0, 60))
        self.ui.frame.setGraphicsEffect(self.shadow)

    # QTImer ==> Start

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.progress)

    ##Timer in millisecond
        self.timer.start(35)

    def progress(self):

        global counter

        # SET Value to progress bar
        self.ui.progressBar.setValue(counter)

        # CLose splash scree and open app

        if counter > 100:
            #stop timer
            self.timer.stop()
            
            #show main window
            self.main = MainWindow()
            self.main.show()

            #close splash screen
            self.close()

        counter += 1
    
    def start_animation(self):
        opacity_effect = QtWidgets.QGraphicsOpacityEffect(self.label)
        self.label.setGraphicsEffect(opacity_effect)

        geometry_animation = QtCore.QPropertyAnimation(
            self.label,
            b"geometry",
            duration=4700,
            startValue=QtCore.QRect(190, -260, 671, 261),
            endValue=QtCore.QRect(42, 274, 391, 231),
        )

        opacity_animation = QtCore.QPropertyAnimation(
            opacity_effect, 
            b"opacity", 
            duration=6000, 
            startValue=0.0, 
            endValue=1.0
        )

        group = QtCore.QParallelAnimationGroup(self.label)
        group.addAnimation(geometry_animation)
        group.addAnimation(opacity_animation)
        group.start(QtCore.QAbstractAnimation.DeleteWhenStopped)
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2022-09-06T07:06:33Z2022-09-06T07:06:33Z

    该类QPropertyAnimation动画Qt属性。
    更多https://doc.qt.io/qt-5/qpropertyanimation.html

    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.Qt import *
    
    
    class Ui_MainWindow10(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(492, 613)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setStyleSheet("#centralwidget{\n"
    "background-color: rgb(0, 0, 0);\n"
    "}")
            self.centralwidget.setObjectName("centralwidget")
            self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
            self.verticalLayout.setObjectName("verticalLayout")
            
            self.frame = QtWidgets.QFrame(self.centralwidget)
            self.frame.setStyleSheet("QFrame {\n"
    "background-color: rgb(0, 0, 0);\n"
    "color: rgb(220, 220, 220);\n"
    "border-radius: 10px\n"
    "\n"
    "}")
            self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
            self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
            self.frame.setObjectName("frame")
            
            self.progressBar = QtWidgets.QProgressBar(self.frame)
    #        self.progressBar.setGeometry(QtCore.QRect(126, 530, 220, 30))
    # +++
            self.progressBar.setStyleSheet("""
            QProgressBar {
                background-color: #DA7B93;
                color: rgb(200, 200, 200);
                border-style: none;
                border-radius: 10px;
                text-align: center;
                font-size: 30px;
            }
            QProgressBar::chunk {
                border-radius: 10px;
                background-color: qlineargradient(spread:pad x1:0, x2:1, y1:0.511364, y2:0.523, stop:0 #1C3334, stop:1 #376E6F);
            }
            """)
            self.progressBar.setAlignment(QtCore.Qt.AlignCenter)
            self.progressBar.setObjectName("progressBar")
    # +++        
            self.progressBar.resize(self.width() - 180, 40)
            self.progressBar.move(80, 510)
            self.progressBar.setFormat('%p%')
            self.progressBar.setTextVisible(True)
            self.progressBar.setRange(0, 150)
            self.progressBar.setValue(20)
            
            self.label_4 = QtWidgets.QLabel(self.frame)
            self.label_4.setGeometry(QtCore.QRect(300, 560, 181, 31))
            font = QtGui.QFont()
            font.setPointSize(14)
            self.label_4.setFont(font)
            self.label_4.setStyleSheet("color: rgb(98, 114, 164);")
            self.label_4.setObjectName("label_4")
            self.label_3 = QtWidgets.QLabel(self.frame)
            self.label_3.setGeometry(QtCore.QRect(20, 0, 431, 291))
            self.label_3.setText("")
            self.label_3.setPixmap(QtGui.QPixmap("lena.jpg"))
            self.label_3.setAlignment(QtCore.Qt.AlignCenter)
            self.label_3.setObjectName("label_3")
            self.label = QtWidgets.QLabel(self.frame)
            self.label.setGeometry(QtCore.QRect(42, 274, 391, 231))
            self.label.setText("")
            self.label.setPixmap(QtGui.QPixmap("Ok.png"))
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setObjectName("label")
            
            self.verticalLayout.addWidget(self.frame)
            MainWindow.setCentralWidget(self.centralwidget)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.label_4.setText(_translate("MainWindow", "<strong>Created</strong>: Nanoxia"))
    
    
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow10):   
        def __init__(self):
            super().__init__()
            
            self.setupUi(self)
            
            self.counter = 0
            self.timer = QTimer()
            self.timer.timeout.connect(self.loading)
            self.timer.start(30)
            
            self.start_animation()
    
        def loading(self):
            self.progressBar.setValue(self.counter)
            self.counter += 1
            if self.counter == 151: self.timer.stop()
            
        def start_animation(self):
            opacity_effect = QtWidgets.QGraphicsOpacityEffect(self.label)
            self.label.setGraphicsEffect(opacity_effect)
    
            geometry_animation = QtCore.QPropertyAnimation(
                self.label,
                b"geometry",
                duration=4700,
                startValue=QtCore.QRect(190, -260, 671, 261),
                endValue=QtCore.QRect(42, 274, 391, 231),
            )
    
            opacity_animation = QtCore.QPropertyAnimation(
                opacity_effect, 
                b"opacity", 
                duration=6000, 
                startValue=0.0, 
                endValue=1.0
            )
    
            group = QtCore.QParallelAnimationGroup(self.label)
            group.addAnimation(geometry_animation)
            group.addAnimation(opacity_animation)
            group.start(QtCore.QAbstractAnimation.DeleteWhenStopped)
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    在此处输入图像描述


    更新

    图片飞到角落,但我需要它出现在它的位置。

    我给你看了ДВЕ动画。删除动画geometry_animation,您将拥有所需的内容。

    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.Qt import *
    
    
    class Ui_MainWindow10(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(492, 613)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setStyleSheet("#centralwidget{\n"
    "background-color: rgb(0, 0, 0);\n"
    "}")
            self.centralwidget.setObjectName("centralwidget")
            self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
            self.verticalLayout.setObjectName("verticalLayout")
            
            self.frame = QtWidgets.QFrame(self.centralwidget)
            self.frame.setStyleSheet("QFrame {\n"
    "background-color: rgb(0, 0, 0);\n"
    "color: rgb(220, 220, 220);\n"
    "border-radius: 10px\n"
    "\n"
    "}")
            self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
            self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
            self.frame.setObjectName("frame")
            
            self.progressBar = QtWidgets.QProgressBar(self.frame)
    #        self.progressBar.setGeometry(QtCore.QRect(126, 530, 220, 30))
    # +++
            self.progressBar.setStyleSheet("""
            QProgressBar {
                background-color: #DA7B93;
                color: rgb(200, 200, 200);
                border-style: none;
                border-radius: 10px;
                text-align: center;
                font-size: 30px;
            }
            QProgressBar::chunk {
                border-radius: 10px;
                background-color: qlineargradient(spread:pad x1:0, x2:1, y1:0.511364, y2:0.523, stop:0 #1C3334, stop:1 #376E6F);
            }
            """)
            self.progressBar.setAlignment(QtCore.Qt.AlignCenter)
            self.progressBar.setObjectName("progressBar")
    # +++        
            self.progressBar.resize(self.width() - 180, 40)
            self.progressBar.move(80, 510)
            self.progressBar.setFormat('%p%')
            self.progressBar.setTextVisible(True)
            self.progressBar.setRange(0, 150)
            self.progressBar.setValue(20)
            
            self.label_4 = QtWidgets.QLabel(self.frame)
            self.label_4.setGeometry(QtCore.QRect(300, 560, 181, 31))
            font = QtGui.QFont()
            font.setPointSize(14)
            self.label_4.setFont(font)
            self.label_4.setStyleSheet("color: rgb(98, 114, 164);")
            self.label_4.setObjectName("label_4")
            self.label_3 = QtWidgets.QLabel(self.frame)
            self.label_3.setGeometry(QtCore.QRect(20, 0, 431, 291))
            self.label_3.setText("")
            self.label_3.setPixmap(QtGui.QPixmap("lena.jpg"))
            self.label_3.setAlignment(QtCore.Qt.AlignCenter)
            self.label_3.setObjectName("label_3")
            self.label = QtWidgets.QLabel(self.frame)
            self.label.setGeometry(QtCore.QRect(42, 274, 391, 231))
            self.label.setText("")
            self.label.setPixmap(QtGui.QPixmap("Ok.png"))
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setObjectName("label")
            
            self.verticalLayout.addWidget(self.frame)
            MainWindow.setCentralWidget(self.centralwidget)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.label_4.setText(_translate("MainWindow", "<strong>Created</strong>: Nanoxia"))
    
    
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow10):   
        def __init__(self):
            super().__init__()
            
            self.setupUi(self)
            
            self.counter = 0
            self.timer = QTimer()
            self.timer.timeout.connect(self.loading)
            self.timer.start(30)
            
            self.start_animation()
    
        def loading(self):
            self.progressBar.setValue(self.counter)
            self.counter += 1
            if self.counter == 151: self.timer.stop()
            
        def start_animation(self):
            opacity_effect = QtWidgets.QGraphicsOpacityEffect(self.label)
            self.label.setGraphicsEffect(opacity_effect)
            '''
            geometry_animation = QtCore.QPropertyAnimation(
                self.label,
                b"geometry",
                duration=4700,
                startValue=QtCore.QRect(190, -260, 671, 261),
                endValue=QtCore.QRect(42, 274, 391, 231),
            )
            '''
            opacity_animation = QtCore.QPropertyAnimation(
                opacity_effect, 
                b"opacity", 
                duration=6000, 
                startValue=0.0, 
                endValue=1.0
            )
    
            group = QtCore.QParallelAnimationGroup(self.label)
    #        group.addAnimation(geometry_animation)
            group.addAnimation(opacity_animation)
            group.start(QtCore.QAbstractAnimation.DeleteWhenStopped)
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    在此处输入图像描述

    莉娜.jpg

    在此处输入图像描述

    好的.png

    在此处输入图像描述

    • 2

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5