我试图在飞溅屏幕之后加载房屋屏幕

发布于 2025-02-08 09:05:05 字数 8428 浏览 1 评论 0原文

飞溅屏幕之后,我试图装载房屋。运行代码后,SplashScreen设法加载,但停止了。我该如何解决?

这是我的SplashScreen类,

class SplashScreen(QWidget):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 350)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.counter = 0
        self.n = 100
        self.initUI()
        self.timer = QTimer()
        self.timer.timeout.connect(self.loading)
        self.timer.start(30)

    def initUI(self):
        # layout to display splash scrren frame
        layout = QVBoxLayout()
        self.setLayout(layout)
        # splash screen frame
        self.frame = QFrame()
        layout.addWidget(self.frame)
        # splash screen title
        self.title_label = QLabel(self.frame)
        self.title_label.setObjectName('title_label')
        self.title_label.resize(690, 120)
        self.title_label.move(0, 5)  # x, y
        self.title_label.setText('Splash Screen')
        self.title_label.setAlignment(Qt.AlignCenter)
        # splash screen title description
        self.description_label = QLabel(self.frame)
        self.description_label.resize(690, 40)
        self.description_label.move(0, self.title_label.height())
        self.description_label.setObjectName('desc_label')
        self.description_label.setText('<b>Splash Screen PyQt-5</b>')
        self.description_label.setAlignment(Qt.AlignCenter)
        # splash screen pogressbar
        self.progressBar = QProgressBar(self.frame)
        self.progressBar.resize(self.width() - 200 - 10, 50)
        self.progressBar.move(100, 180)  # self.description_label.y()+130
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.setFormat('%p%')
        self.progressBar.setTextVisible(True)
        self.progressBar.setRange(0, self.n)
        self.progressBar.setValue(20)
        # spash screen loading label
        self.loading_label = QLabel(self.frame)
        self.loading_label.resize(self.width() - 10, 50)
        self.loading_label.move(0, self.progressBar.y() + 70)
        self.loading_label.setObjectName('loading_label')
        self.loading_label.setAlignment(Qt.AlignCenter)
        self.loading_label.setText('Loading...')

这是允许SplashScreen负载并启动Window App类但行不通的功能。我的意思是不起作用,我的意思是它不会加载窗口。它只是关闭。

    def loading(self):
        # set progressbar value
        self.progressBar.setValue(self.counter)
        # stop progress if counter
        # is greater than n and
        # display main window app
        if self.counter >= self.n:
            self.timer.stop()
            self.close()
            MainWindow = QtWidgets.QMainWindow()
            ui = WindowApp()
            ui.setupUi(MainWindow)
            MainWindow.show()

        self.counter += 1

这是我的主窗口,

class WindowApp(QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1006, 654)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 981, 641))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.label.setFont(font)
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("../pygui/Homescreen.png"))
        self.label.setScaledContents(True)
        self.label.setWordWrap(False)
        self.label.setObjectName("label")

        self.infoBtn = QtWidgets.QPushButton(self.centralwidget)
        self.infoBtn.setGeometry(QtCore.QRect(120, 550, 181, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(15)
        self.infoBtn.setFont(font)
        self.infoBtn.setStyleSheet("border-radius: 10px;\n"
                                   "border-color: 2px solid gray;\n"
                                   "background-color: rgb(255, 255, 255);")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("icons/info_icon.png"),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.infoBtn.setIcon(icon)
        self.infoBtn.setObjectName("infoBtn")

        self.startBtn = QtWidgets.QPushButton(self.centralwidget)
        self.startBtn.setGeometry(QtCore.QRect(310, 270, 431, 111))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(28)
        self.startBtn.setFont(font)
        self.startBtn.setStyleSheet("background-color: #305E6C;\n"
                                    "color: white;\n"
                                    "border-radius: 10px;\n"
                                    "border: 2px solid white")
        self.startBtn.setObjectName("startBtn")

        self.contactsBtn = QtWidgets.QPushButton(self.centralwidget)
        self.contactsBtn.setGeometry(QtCore.QRect(720, 30, 101, 101))
        self.contactsBtn.setStyleSheet("\n"
                                       "background-color: #121212;\n"
                                       "border-radius: 50%;\n"
                                       "border: 2px solid white;")
        self.contactsBtn.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("icons/typcn_contacts.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.contactsBtn.setIcon(icon1)
        self.contactsBtn.setIconSize(QtCore.QSize(40, 40))
        self.contactsBtn.setObjectName("contactsBtn")

        self.dateBtn = QtWidgets.QPushButton(self.centralwidget)
        self.dateBtn.setGeometry(QtCore.QRect(840, 30, 101, 101))
        self.dateBtn.setStyleSheet("\n"
                                   "background-color: #121212;\n"
                                   "border-radius: 50%;\n"
                                   "border: 2px solid white;")
        self.dateBtn.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("icons/Group.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.dateBtn.setIcon(icon2)
        self.dateBtn.setIconSize(QtCore.QSize(40, 40))
        self.dateBtn.setObjectName("dateBtn")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1006, 21))
        self.menubar.setObjectName("menubar")

        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

        self.infoBtn.clicked.connect(partial(self.show_popup))
        self.dateBtn.clicked.connect(self.openDateWindow)
        self.startBtn.clicked.connect(self.openDriveWindow)
        self.contactsBtn.clicked.connect(self.openContactWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.infoBtn.setText(_translate("MainWindow", "About"))
        self.startBtn.setText(_translate("MainWindow", "Driving Mode"))

    def show_popup(self):
        msg = QMessageBox()
        msg.setWindowTitle('About Us')
        msg.setText('Testing')
        msg.setIcon(QMessageBox.Information)
        x = msg.exec_()

    def openDateWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DateWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openDriveWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DriveWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openContactWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_ContactWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

我尝试将其更改为windowapp()只是为了检查MainWindow是否有任何问题,但它设法在没有Splashscreen的情况下加载。

app = QApplication(sys.argv)
splash = SplashScreen()
splash.show()

sys.exit(app.exec_())

I am trying to load my homescreen after the splashscreen. Upon running the code, the splashscreen manages to load but it stops there. How do I fix this?

This is my SplashScreen class

class SplashScreen(QWidget):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 350)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.counter = 0
        self.n = 100
        self.initUI()
        self.timer = QTimer()
        self.timer.timeout.connect(self.loading)
        self.timer.start(30)

    def initUI(self):
        # layout to display splash scrren frame
        layout = QVBoxLayout()
        self.setLayout(layout)
        # splash screen frame
        self.frame = QFrame()
        layout.addWidget(self.frame)
        # splash screen title
        self.title_label = QLabel(self.frame)
        self.title_label.setObjectName('title_label')
        self.title_label.resize(690, 120)
        self.title_label.move(0, 5)  # x, y
        self.title_label.setText('Splash Screen')
        self.title_label.setAlignment(Qt.AlignCenter)
        # splash screen title description
        self.description_label = QLabel(self.frame)
        self.description_label.resize(690, 40)
        self.description_label.move(0, self.title_label.height())
        self.description_label.setObjectName('desc_label')
        self.description_label.setText('<b>Splash Screen PyQt-5</b>')
        self.description_label.setAlignment(Qt.AlignCenter)
        # splash screen pogressbar
        self.progressBar = QProgressBar(self.frame)
        self.progressBar.resize(self.width() - 200 - 10, 50)
        self.progressBar.move(100, 180)  # self.description_label.y()+130
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.setFormat('%p%')
        self.progressBar.setTextVisible(True)
        self.progressBar.setRange(0, self.n)
        self.progressBar.setValue(20)
        # spash screen loading label
        self.loading_label = QLabel(self.frame)
        self.loading_label.resize(self.width() - 10, 50)
        self.loading_label.move(0, self.progressBar.y() + 70)
        self.loading_label.setObjectName('loading_label')
        self.loading_label.setAlignment(Qt.AlignCenter)
        self.loading_label.setText('Loading...')

This is the function that lets the splashscreen load and launch the WindowApp class but it does not work. What I mean by does not work I meant that it does not load the WindowApp. It just closes.

    def loading(self):
        # set progressbar value
        self.progressBar.setValue(self.counter)
        # stop progress if counter
        # is greater than n and
        # display main window app
        if self.counter >= self.n:
            self.timer.stop()
            self.close()
            MainWindow = QtWidgets.QMainWindow()
            ui = WindowApp()
            ui.setupUi(MainWindow)
            MainWindow.show()

        self.counter += 1

This is my main window

class WindowApp(QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1006, 654)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 981, 641))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.label.setFont(font)
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("../pygui/Homescreen.png"))
        self.label.setScaledContents(True)
        self.label.setWordWrap(False)
        self.label.setObjectName("label")

        self.infoBtn = QtWidgets.QPushButton(self.centralwidget)
        self.infoBtn.setGeometry(QtCore.QRect(120, 550, 181, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(15)
        self.infoBtn.setFont(font)
        self.infoBtn.setStyleSheet("border-radius: 10px;\n"
                                   "border-color: 2px solid gray;\n"
                                   "background-color: rgb(255, 255, 255);")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("icons/info_icon.png"),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.infoBtn.setIcon(icon)
        self.infoBtn.setObjectName("infoBtn")

        self.startBtn = QtWidgets.QPushButton(self.centralwidget)
        self.startBtn.setGeometry(QtCore.QRect(310, 270, 431, 111))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(28)
        self.startBtn.setFont(font)
        self.startBtn.setStyleSheet("background-color: #305E6C;\n"
                                    "color: white;\n"
                                    "border-radius: 10px;\n"
                                    "border: 2px solid white")
        self.startBtn.setObjectName("startBtn")

        self.contactsBtn = QtWidgets.QPushButton(self.centralwidget)
        self.contactsBtn.setGeometry(QtCore.QRect(720, 30, 101, 101))
        self.contactsBtn.setStyleSheet("\n"
                                       "background-color: #121212;\n"
                                       "border-radius: 50%;\n"
                                       "border: 2px solid white;")
        self.contactsBtn.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("icons/typcn_contacts.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.contactsBtn.setIcon(icon1)
        self.contactsBtn.setIconSize(QtCore.QSize(40, 40))
        self.contactsBtn.setObjectName("contactsBtn")

        self.dateBtn = QtWidgets.QPushButton(self.centralwidget)
        self.dateBtn.setGeometry(QtCore.QRect(840, 30, 101, 101))
        self.dateBtn.setStyleSheet("\n"
                                   "background-color: #121212;\n"
                                   "border-radius: 50%;\n"
                                   "border: 2px solid white;")
        self.dateBtn.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("icons/Group.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.dateBtn.setIcon(icon2)
        self.dateBtn.setIconSize(QtCore.QSize(40, 40))
        self.dateBtn.setObjectName("dateBtn")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1006, 21))
        self.menubar.setObjectName("menubar")

        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

        self.infoBtn.clicked.connect(partial(self.show_popup))
        self.dateBtn.clicked.connect(self.openDateWindow)
        self.startBtn.clicked.connect(self.openDriveWindow)
        self.contactsBtn.clicked.connect(self.openContactWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.infoBtn.setText(_translate("MainWindow", "About"))
        self.startBtn.setText(_translate("MainWindow", "Driving Mode"))

    def show_popup(self):
        msg = QMessageBox()
        msg.setWindowTitle('About Us')
        msg.setText('Testing')
        msg.setIcon(QMessageBox.Information)
        x = msg.exec_()

    def openDateWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DateWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openDriveWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DriveWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openContactWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_ContactWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

I have tried changing this to WindowApp() just to check if the MainWindow has any problems but it manages to load without the splashscreen.

app = QApplication(sys.argv)
splash = SplashScreen()
splash.show()

sys.exit(app.exec_())

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

把梦留给海 2025-02-15 09:05:05

我认为会帮助您。
您可以显示飞溅屏幕,当启动屏幕关闭时,您可以显示主窗口。它类似于以前的问题的登录窗口

,但是如果您想按照自己的方式实现代码,我认为我知道这个问题。

您调用一个创建QMainWindow的方法,并为该QMainWindow调用.show()。完成该方法后,该方法中的变量是收集垃圾的,您的QMainWindow对象也是如此。保持参考并防止这些变量收集垃圾的方法是,通过在变量的前面添加self。来使其成为类变量。

我可能会重组一些事情,然后做这样的事情:

if __name__ == "__main__":
    app            = QApplication(sys.argv)
    splash         = SplashScreen()
    splash_closed  = splash.exec_()

    if splash_closed:                             
        window = WindowApp()   
        window.show()
        sys.exit(app.exec_())

plashscreen现在是一个qdialog,当您完成加载后,您可以使用self.accept()关闭对话框,而不是尝试显示一个新窗口:

class SplashScreen(QDialog):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 350)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.counter = 0
        self.n = 100
        self.initUI()
        self.timer = QTimer()
        self.timer.timeout.connect(self.loading)
        self.timer.start(30)

    def initUI(self):
        ...

    def loading(self):
        # set progressbar value
        self.progressBar.setValue(self.counter)
        # stop progress if counter
        # is greater than n and
        # display main window app
        if self.counter >= self.n:
            self.timer.stop()
            self.accept()

        self.counter += 1

而且您也应该使用。主窗口上的__ Init __方法,也许在其中移动所有self.setupui代码,或者只是做这样的事情:

class WindowApp(QMainWindow):
    def __init__(self):
        QtWidgets.QDialog.__init__(self)                                                        
        self.setupUi(self)
    
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1006, 654)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

Check my answer from this previous post that I think will help you.
You can show the splash screen and when the splash screen closes then you can show your main window. It's similar to the login window from this previous question

But if you want to keep implementing your code the way you have it I think I know the problem.

You call a method which creates the QMainWindow and calls the .show() for that QMainWindow. Once the method is done the variables in that method are garbage collected and so is your QMainWindow object. The way to keep the reference and prevent those variables from getting garbage collected is by making it a class variable by adding self. in front of the variable.

I would maybe restructure a bit and do something like this:

if __name__ == "__main__":
    app            = QApplication(sys.argv)
    splash         = SplashScreen()
    splash_closed  = splash.exec_()

    if splash_closed:                             
        window = WindowApp()   
        window.show()
        sys.exit(app.exec_())

Where the splashscreen is now a QDialog and when you're done loading you close the dialog with self.accept() instead of trying to show a new window:

class SplashScreen(QDialog):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 350)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.counter = 0
        self.n = 100
        self.initUI()
        self.timer = QTimer()
        self.timer.timeout.connect(self.loading)
        self.timer.start(30)

    def initUI(self):
        ...

    def loading(self):
        # set progressbar value
        self.progressBar.setValue(self.counter)
        # stop progress if counter
        # is greater than n and
        # display main window app
        if self.counter >= self.n:
            self.timer.stop()
            self.accept()

        self.counter += 1

And you should also use the __init__ method on your main window and maybe move all the self.setupUI code in there, or just do something like this:

class WindowApp(QMainWindow):
    def __init__(self):
        QtWidgets.QDialog.__init__(self)                                                        
        self.setupUi(self)
    
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1006, 654)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
鯉魚旗 2025-02-15 09:05:05

希望这会有所帮助

import sys
from PyQt5.QtWidgets import QMainWindow, QDialog, QApplication
from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QFrame, QLabel, QProgressBar
from PyQt5.QtWidgets import QWidget
from PyQt5 import QtCore, QtGui
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt, QTimer

class SplashScreen(QWidget):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 350)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.counter = 0
        self.n = 100
        self.initUI()
        self.timer = QTimer()
        self.timer.timeout.connect(self.loading)
        self.timer.start(30)

    def initUI(self):
        # layout to display splash scrren frame
        layout = QVBoxLayout()
        self.setLayout(layout)
        # splash screen frame
        self.frame = QFrame()
        layout.addWidget(self.frame)
        # splash screen title
        self.title_label = QLabel(self.frame)
        self.title_label.setObjectName('title_label')
        self.title_label.resize(690, 120)
        self.title_label.move(0, 5)  # x, y
        self.title_label.setText('Splash Screen')
        self.title_label.setAlignment(Qt.AlignCenter)
        # splash screen title description
        self.description_label = QLabel(self.frame)
        self.description_label.resize(690, 40)
        self.description_label.move(0, self.title_label.height())
        self.description_label.setObjectName('desc_label')
        self.description_label.setText('<b>Splash Screen PyQt-5</b>')
        self.description_label.setAlignment(Qt.AlignCenter)
        # splash screen pogressbar
        self.progressBar = QProgressBar(self.frame)
        self.progressBar.resize(self.width() - 200 - 10, 50)
        self.progressBar.move(100, 180)  # self.description_label.y()+130
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.setFormat('%p%')
        self.progressBar.setTextVisible(True)
        self.progressBar.setRange(0, self.n)
        self.progressBar.setValue(20)
        # spash screen loading label
        self.loading_label = QLabel(self.frame)
        self.loading_label.resize(self.width() - 10, 50)
        self.loading_label.move(0, self.progressBar.y() + 70)
        self.loading_label.setObjectName('loading_label')
        self.loading_label.setAlignment(Qt.AlignCenter)
        self.loading_label.setText('Loading...')
        self.show()


    def loading(self):
        # set progressbar value
        self.progressBar.setValue(self.counter)
        # stop progress if counter
        # is greater than n and
        # display main window app
        if self.counter >= self.n:
            self.timer.stop()
            '''
            self.close()
            MainWindow = QtWidgets.QMainWindow()
            ui = WindowApp()
            ui.setupUi(MainWindow)
            MainWindow.show()
            '''
            self.ui = WindowApp()
            self.ui.show()
            self.close()

        self.counter += 1

class WindowApp(QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1006, 654)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 981, 641))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.label.setFont(font)
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("../pygui/Homescreen.png"))
        self.label.setScaledContents(True)
        self.label.setWordWrap(False)
        self.label.setObjectName("label")

        self.infoBtn = QtWidgets.QPushButton(self.centralwidget)
        self.infoBtn.setGeometry(QtCore.QRect(120, 550, 181, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(15)
        self.infoBtn.setFont(font)
        self.infoBtn.setStyleSheet("border-radius: 10px;\n"
                                   "border-color: 2px solid gray;\n"
                                   "background-color: rgb(255, 255, 255);")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("icons/info_icon.png"),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.infoBtn.setIcon(icon)
        self.infoBtn.setObjectName("infoBtn")

        self.startBtn = QtWidgets.QPushButton(self.centralwidget)
        self.startBtn.setGeometry(QtCore.QRect(310, 270, 431, 111))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(28)
        self.startBtn.setFont(font)
        self.startBtn.setStyleSheet("background-color: #305E6C;\n"
                                    "color: white;\n"
                                    "border-radius: 10px;\n"
                                    "border: 2px solid white")
        self.startBtn.setObjectName("startBtn")

        self.contactsBtn = QtWidgets.QPushButton(self.centralwidget)
        self.contactsBtn.setGeometry(QtCore.QRect(720, 30, 101, 101))
        self.contactsBtn.setStyleSheet("\n"
                                       "background-color: #121212;\n"
                                       "border-radius: 50%;\n"
                                       "border: 2px solid white;")
        self.contactsBtn.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("icons/typcn_contacts.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.contactsBtn.setIcon(icon1)
        self.contactsBtn.setIconSize(QtCore.QSize(40, 40))
        self.contactsBtn.setObjectName("contactsBtn")

        self.dateBtn = QtWidgets.QPushButton(self.centralwidget)
        self.dateBtn.setGeometry(QtCore.QRect(840, 30, 101, 101))
        self.dateBtn.setStyleSheet("\n"
                                   "background-color: #121212;\n"
                                   "border-radius: 50%;\n"
                                   "border: 2px solid white;")
        self.dateBtn.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("icons/Group.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.dateBtn.setIcon(icon2)
        self.dateBtn.setIconSize(QtCore.QSize(40, 40))
        self.dateBtn.setObjectName("dateBtn")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1006, 21))
        self.menubar.setObjectName("menubar")

        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

        self.infoBtn.clicked.connect(partial(self.show_popup))
        self.dateBtn.clicked.connect(self.openDateWindow)
        self.startBtn.clicked.connect(self.openDriveWindow)
        self.contactsBtn.clicked.connect(self.openContactWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.infoBtn.setText(_translate("MainWindow", "About"))
        self.startBtn.setText(_translate("MainWindow", "Driving Mode"))

    def show_popup(self):
        msg = QMessageBox()
        msg.setWindowTitle('About Us')
        msg.setText('Testing')
        msg.setIcon(QMessageBox.Information)
        x = msg.exec_()

    def openDateWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DateWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openDriveWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DriveWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openContactWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_ContactWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

app = QApplication(sys.argv)
splash = SplashScreen()
#splash.show()

sys.exit(app.exec_())

Hope this helps

import sys
from PyQt5.QtWidgets import QMainWindow, QDialog, QApplication
from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QFrame, QLabel, QProgressBar
from PyQt5.QtWidgets import QWidget
from PyQt5 import QtCore, QtGui
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt, QTimer

class SplashScreen(QWidget):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 350)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.counter = 0
        self.n = 100
        self.initUI()
        self.timer = QTimer()
        self.timer.timeout.connect(self.loading)
        self.timer.start(30)

    def initUI(self):
        # layout to display splash scrren frame
        layout = QVBoxLayout()
        self.setLayout(layout)
        # splash screen frame
        self.frame = QFrame()
        layout.addWidget(self.frame)
        # splash screen title
        self.title_label = QLabel(self.frame)
        self.title_label.setObjectName('title_label')
        self.title_label.resize(690, 120)
        self.title_label.move(0, 5)  # x, y
        self.title_label.setText('Splash Screen')
        self.title_label.setAlignment(Qt.AlignCenter)
        # splash screen title description
        self.description_label = QLabel(self.frame)
        self.description_label.resize(690, 40)
        self.description_label.move(0, self.title_label.height())
        self.description_label.setObjectName('desc_label')
        self.description_label.setText('<b>Splash Screen PyQt-5</b>')
        self.description_label.setAlignment(Qt.AlignCenter)
        # splash screen pogressbar
        self.progressBar = QProgressBar(self.frame)
        self.progressBar.resize(self.width() - 200 - 10, 50)
        self.progressBar.move(100, 180)  # self.description_label.y()+130
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.setFormat('%p%')
        self.progressBar.setTextVisible(True)
        self.progressBar.setRange(0, self.n)
        self.progressBar.setValue(20)
        # spash screen loading label
        self.loading_label = QLabel(self.frame)
        self.loading_label.resize(self.width() - 10, 50)
        self.loading_label.move(0, self.progressBar.y() + 70)
        self.loading_label.setObjectName('loading_label')
        self.loading_label.setAlignment(Qt.AlignCenter)
        self.loading_label.setText('Loading...')
        self.show()


    def loading(self):
        # set progressbar value
        self.progressBar.setValue(self.counter)
        # stop progress if counter
        # is greater than n and
        # display main window app
        if self.counter >= self.n:
            self.timer.stop()
            '''
            self.close()
            MainWindow = QtWidgets.QMainWindow()
            ui = WindowApp()
            ui.setupUi(MainWindow)
            MainWindow.show()
            '''
            self.ui = WindowApp()
            self.ui.show()
            self.close()

        self.counter += 1

class WindowApp(QMainWindow):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1006, 654)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 981, 641))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.label.setFont(font)
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("../pygui/Homescreen.png"))
        self.label.setScaledContents(True)
        self.label.setWordWrap(False)
        self.label.setObjectName("label")

        self.infoBtn = QtWidgets.QPushButton(self.centralwidget)
        self.infoBtn.setGeometry(QtCore.QRect(120, 550, 181, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(15)
        self.infoBtn.setFont(font)
        self.infoBtn.setStyleSheet("border-radius: 10px;\n"
                                   "border-color: 2px solid gray;\n"
                                   "background-color: rgb(255, 255, 255);")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("icons/info_icon.png"),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.infoBtn.setIcon(icon)
        self.infoBtn.setObjectName("infoBtn")

        self.startBtn = QtWidgets.QPushButton(self.centralwidget)
        self.startBtn.setGeometry(QtCore.QRect(310, 270, 431, 111))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(28)
        self.startBtn.setFont(font)
        self.startBtn.setStyleSheet("background-color: #305E6C;\n"
                                    "color: white;\n"
                                    "border-radius: 10px;\n"
                                    "border: 2px solid white")
        self.startBtn.setObjectName("startBtn")

        self.contactsBtn = QtWidgets.QPushButton(self.centralwidget)
        self.contactsBtn.setGeometry(QtCore.QRect(720, 30, 101, 101))
        self.contactsBtn.setStyleSheet("\n"
                                       "background-color: #121212;\n"
                                       "border-radius: 50%;\n"
                                       "border: 2px solid white;")
        self.contactsBtn.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("icons/typcn_contacts.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.contactsBtn.setIcon(icon1)
        self.contactsBtn.setIconSize(QtCore.QSize(40, 40))
        self.contactsBtn.setObjectName("contactsBtn")

        self.dateBtn = QtWidgets.QPushButton(self.centralwidget)
        self.dateBtn.setGeometry(QtCore.QRect(840, 30, 101, 101))
        self.dateBtn.setStyleSheet("\n"
                                   "background-color: #121212;\n"
                                   "border-radius: 50%;\n"
                                   "border: 2px solid white;")
        self.dateBtn.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("icons/Group.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.dateBtn.setIcon(icon2)
        self.dateBtn.setIconSize(QtCore.QSize(40, 40))
        self.dateBtn.setObjectName("dateBtn")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1006, 21))
        self.menubar.setObjectName("menubar")

        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

        self.infoBtn.clicked.connect(partial(self.show_popup))
        self.dateBtn.clicked.connect(self.openDateWindow)
        self.startBtn.clicked.connect(self.openDriveWindow)
        self.contactsBtn.clicked.connect(self.openContactWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.infoBtn.setText(_translate("MainWindow", "About"))
        self.startBtn.setText(_translate("MainWindow", "Driving Mode"))

    def show_popup(self):
        msg = QMessageBox()
        msg.setWindowTitle('About Us')
        msg.setText('Testing')
        msg.setIcon(QMessageBox.Information)
        x = msg.exec_()

    def openDateWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DateWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openDriveWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_DriveWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

    def openContactWindow(self, MainWindow):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_ContactWindow()
        self.ui.setupUi(self.window, MainWindow)
        self.window.show()
        MainWindow.hide()

app = QApplication(sys.argv)
splash = SplashScreen()
#splash.show()

sys.exit(app.exec_())
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文