为了账号安全,请及时绑定邮箱和手机立即绑定

从 ui 对话框导入中阻止启动屏幕

从 ui 对话框导入中阻止启动屏幕

扬帆大鱼 2022-04-23 16:56:40
我制作了一个大型应用程序,在主应用程序(主循环)中导入了大量对话框。这些对话框导入时间很长,所以我做了一个启动画面,但主循环中的启动画面当然被长时间导入阻止了。认为我没有得到的是我不能在主循环中移动导入,因为我从创建 ui 的类中得到一个错误,当代码从解释器检查时运行。这里是示例代码:from PyQt5 import QtCore, QtGui, QtWidgets, QtPrintSupportfrom PyQt5.QtWidgets import QDialog,QWidget,QApplication, QInputDialog, QLineEdit, QFileDialog,QProgressDialog, QMainWindow, QFrame,QSplashScreenfrom PyQt5.QtCore import QThread , pyqtSignal,Qtfrom PyQt5.QtGui import QIcon,QPainter,QPixmap#here the slow import dialogsfrom ui import Ui_MainWindow,HoverButtonfrom dialog1 import Ui_Dialogfrom dialog2 import Ui_Dialog2from dialog3 import Ui_dialog3from dialog4 import Ui_Dialog4from dialog5 import Ui_dialog5from dialog6 import Ui_dialog6#....... and so on###after class methods###class Dialog1(QtWidgets.QDialog,Ui_Dialog):                                #fuel button prompt dialog for inputs    def __init__(self,parent=None):        super(Dialog1, self).__init__(parent)        self.setupUi(self)class Dialog2(QtWidgets.QDialog,Ui_Dialog2):                               #all errors dialog    def __init__(self,parent=None):        super(Dialog2, self).__init__(parent)        self.setupUi(self)class Dialog3(QtWidgets.QDialog,Ui_dialog3):                               #that might take a while dialog    def __init__(self,parent=None):        super(Dialog3, self).__init__(parent)        self.setupUi(self)class Dialog4(QtWidgets.QDialog,Ui_Dialog4):                               #input gross weight dialog    def __init__(self,parent=None):        super(Dialog4, self).__init__(parent)        self.setupUi(self)class Dialog5(QtWidgets.QDialog,Ui_dialog5):                               #map viewer specifications dialog    def __init__(self,parent=None):        super(Dialog5, self).__init__(parent)        self.setupUi(self)
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

假设唯一的问题是大量对话,而不是每个对话本身都有一个消耗大量时间的任务,因此可能的选择是每 T ms 加载每个对话,以便在过渡时间内 QSplashScreen 正常工作。


# ...

###MAIN GUI###

class mainProgram(QtWidgets.QMainWindow, Ui_MainWindow):

    loadFinished = QtCore.pyqtSignal()


    def __init__(self, parent=None):

        super(mainProgram, self).__init__(parent)

        self.setupUi(self)

        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)


        self._T_dialogs = iter(

            enumerate((Dialog1, Dialog2, Dialog3, Dialog4, Dialog5, Dialog6))

        )


        self._timer = QtCore.QTimer(self, timeout=self.create_dialogs, interval=100)

        self._timer.start()


    @QtCore.pyqtSlot()

    def create_dialogs(self):

        try:

            i, T = next(self._T_dialogs)

            w = T(self)

            setattr(self, "dialog{}".format(i), w)

        except StopIteration:

            self._timer.stop()

            self.showMaximized()

            self.loadFinished.emit()



if __name__ == "__main__":

    import sys


    app = QtWidgets.QApplication(sys.argv)

    splash_pix = QtGui.QPixmap("loading.jpg")

    splash_pix.scaled(200, 400, QtCore.Qt.KeepAspectRatio)

    splash = QtWidgets.QSplashScreen(splash_pix, QtCore.Qt.WindowStaysOnTopHint)

    splash.setMask(splash_pix.mask())

    splash.show()

    nextGui = mainProgram()

    nextGui.loadFinished.connect(splash.close)

    sys.exit(app.exec_())



查看完整回答
反对 回复 2022-04-23
  • 1 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号