首页 > 解决方案 > 使用 time.sleep() 时 Ui 对话框没有响应

问题描述

我喜欢循环运行,但迭代我必须暂停几秒钟我找到了time.sleep(5)在 Windows 中使用此功能时使用的解决方案,我的对话框正在冻结并且“没有响应”。我的标签也没有更新有什么解决办法吗?检查main.py循环中的暂停捕获此问题。由于我的窗口或对话框正在冻结并且没有响应状态

uiui.py

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        if not Dialog.objectName():
            Dialog.setObjectName(u"Dialog")
        Dialog.setEnabled(True)
        Dialog.resize(940, 640)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
        Dialog.setSizePolicy(sizePolicy)
        font = QFont()
        font.setFamily(u"Comic Sans MS")
        font.setPointSize(18)
        font.setBold(True)
        font.setWeight(75)
        Dialog.setFont(font)
        Dialog.setFocusPolicy(Qt.WheelFocus)
        Dialog.setAutoFillBackground(False)
        Dialog.setStyleSheet(u"background-image: none;\n"
"image: none;\n"
"background-color: #000;\n"
"color: #00ff00;\n"
"width: 1500px;\n"
"height: 1500px;")
        self.pushButton = QPushButton(Dialog)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(40, 340, 822, 142))
        self.pushButton.setFont(font)
        self.pushButton.setCursor(QCursor(Qt.PointingHandCursor))
        self.pushButton.setFocusPolicy(Qt.ClickFocus)
        self.pushButton.setStyleSheet(u"QPushButton{\n"
"   border: 2px solid #00ff00;\n"
"   border-radius: 8px;\n"
"}\n"
"QPushButton:hover{\n"
"   border: 2px solid #e61a21;\n"
"   color: #e61a21;\n"
"}\n"
"QPushButton:pressed{\n"
"   border: 2px solid #042f57;\n"
"   color: #042f57;\n"
"}")
        self.label = QLabel(Dialog)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(80, 110, 821, 204))
        self.label.setFont(font)
        self.label.setLayoutDirection(Qt.LeftToRight)
        self.label.setStyleSheet(u"")
        self.label.setAlignment(Qt.AlignCenter)

        self.retranslateUi(Dialog)

        QMetaObject.connectSlotsByName(Dialog)
    # setupUi

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
        self.pushButton.setText(QCoreApplication.translate("Dialog", u"Ffff TffffSfffff NOW", None))
        self.label.setText(QCoreApplication.translate("Dialog", u"Fufff 0/0", None))
    # retranslateUi

主文件

import sys
#from PySide2.QtCore import *
#rom PySide2.QtGui import *
#from PySide2.QtWidgets import *
from PySide2 import QtWidgets
from PySide2 import QtGui
from PySide2 import QtCore
from UiUi import Ui_Dialog

#create app

app = QtWidgets.QApplication(sys.argv)

#init 
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()

#hook logic

counter = 0
domain = "lols.com"

requests = {
                "Step1" : {
                    "q" : "l1",
                    "msg" : f"{domain} - Brasil best lol"
                },
                "Step2" : {
                    "q" : "l1",
                    "msg" : f"{domain} - Argentina best lol"
                },
                "Step3" : {
                    "q" : "l1",
                    "msg" : f"{domain} - Espanhol best lol"
                },
                "Step4" : {
                    "q" : "l1",
                    "msg" : f"{domain} - Colombia best lol"
                },
                "Step5" : {
                    "q" : "l1",
                    "msg" : f"{domain} - Asia best lol"
                },
            }
dictionary_len = len(requests)

def run_kki():
    import time

    global counter
    global domain
    global requests
    global dictionary_len

    """
    while counter < dictionary_len:
        time.sleep(5)
        counter += 1
        dictionary_key = "Step" + str(counter)
        q = requests[dictionary_key]["q"]
        msg = requests[dictionary_key]["msg"]
        print(msg)
        print(f'Ffffff: {counter}/{dictionary_len}')
        ui.label.setText(f'Ffffff: {counter}/{dictionary_len}');
    """
    
    for index, request in requests.items():
        print(request['msg'])
        #Here I do a 5 sec pause for iteractions and got freeze my DialogUi
        time.sleep(5) 

ui.pushButton.clicked.connect(run_kki)

#Main Loop
sys.exit(app.exec_())

标签: python

解决方案


利用qWait

from PyQt4 import QtTest
QtTest.QTest.qWait(msecs)

推荐阅读