PyQt5 - 单窗体的循环渐入渐出(QTimer)

    self.timer = QTimer(Test_Transparent)
    self.timer.start(50)
    self.timer.timeout.connect(self.show)

    #counter用于根据计时器更新窗体透明度
    self.counter = 1
    #degree用于控制透明度的增减性(“显示-透明-显示-透明”为一个循环周期)
    self.degree = -0.03

def show(self):
    if self.counter >= 1:
        time.sleep(3)
        self.counter -= 0.01
        self.degree *= -1
    else:
        window.setWindowOpacity(self.counter)
        self.counter -= self.degree
    if self.counter < 0:
        self.degree *= -1
        self.counter = 0.01


实例:【心灵毒鸡汤的淡入淡出显示】

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QDialog
from PyQt5.QtCore import QTimer,Qt
import sys
import time
import random


class Ui_Test_Transparent(object):
    def setupUi(self, Test_Transparent):
        Test_Transparent.setObjectName("Test_Transparent")
        Test_Transparent.resize(850, 620)
        Test_Transparent.setMinimumSize(QtCore.QSize(850, 620))
        Test_Transparent.setMaximumSize(QtCore.QSize(850, 620))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("./img/icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Test_Transparent.setWindowIcon(icon)
        Test_Transparent.setWindowOpacity(1)
        #Test_Transparent.setWindowFlags(Qt.FramelessWindowHint)
        self.label = QtWidgets.QLabel(Test_Transparent)
        self.label.setEnabled(False)
        self.label.setGeometry(QtCore.QRect(0, 0, 851, 621))
        self.label.setStyleSheet("")
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("./img/x.jpg"))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Test_Transparent)
        self.label_2.setGeometry(QtCore.QRect(155, 130, 551, 341))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label_2.setFont(font)
        self.label_2.setWordWrap(True)
        self.label_2.setObjectName("label_2")
        self.retranslateUi(Test_Transparent)
        QtCore.QMetaObject.connectSlotsByName(Test_Transparent)


    def retranslateUi(self, Test_Transparent):
        _translate = QtCore.QCoreApplication.translate
        Test_Transparent.setWindowTitle(_translate("Test_Transparent", "心灵毒鸡汤"))
        self.timer = QTimer(Test_Transparent)
        self.timer.start(50)
        self.timer.timeout.connect(self.show)

        #语录列表
        a1 = "我感觉我也累了,不折腾了。可能我不配幸福吧,我认命了。"
        a2 = "我以为我能逗你笑你就会喜欢我,可我却输给了让你哭的人。"
        a3 = "若能避开猛烈的欢喜,自然不会有悲痛袭来。"
        a4 = "大学一转眼四年就过去了。"
        self.sentense = [a1,a2,a3,a4]
        self.label_2.setText(random.choice(self.sentense))

        #counter用于根据计时器更新窗体透明度
        self.counter = 1
        #degree用于控制透明度的增减性(“显示-透明-显示-透明”为一个循环周期)
        self.degree = -0.03

    def show(self):
        if self.counter >= 1:
            time.sleep(4)
            self.counter -= 0.01
            self.degree *= -1
        else:
            window.setWindowOpacity(self.counter)
            self.counter -= self.degree
        if self.counter < 0:
            self.label_2.setText(random.choice(self.sentense))
            self.degree *= -1
            self.counter = 0.01



if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QDialog()
    ui = Ui_Test_Transparent()
    ui.setupUi(window)
    window.show()
    sys.exit(app.exec_())

猜你喜欢

转载自blog.csdn.net/qq_42292831/article/details/92848144