python - 使用 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_())
解决方案
利用qWait
from PyQt4 import QtTest
QtTest.QTest.qWait(msecs)
推荐阅读
- webpack - 由于基础,无法指向正确的捆绑包
- angular - 是否可以在不使用第三方链接的情况下使用 typescript 获取公共 IP 地址
- javascript - Angular:错误 TS2322:类型 'Observable<{}>' 不可分配 ... 使用 share() 运算符
- python - ValueError:无法为具有形状“(?,1)”的张量“Placeholder_37:0”提供形状(891,)的值
- python-2.7 - 使用 Selenium Python 复制文本字段值时,HTML 表单不返回剪贴板?
- ios - 为 iPhone 应用程序获取 .IPA 文件
- c++ - 从 .ini 加载数据使我的游戏崩溃!我能做些什么?C++
- spring-mvc - 设置了 DB 毫秒值的 Spring 调度程序
- c# - 将字符串分隔到不在集合字典中的列表中
- java - 具有 2 个过滤条件的 java 流