python - 如何避免Qthread中的“无法为位于不同线程中的父级创建子级”?
问题描述
我如何使用 Qthreads 来完成这个小项目以避免 GUI 冻结,我已经尝试过,但我遇到了如下错误:
无法为不同线程中的父级创建子级
代码:
#############
Gui.py
#############
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'testSMbfao.ui'
##
## Created by: Qt User Interface Compiler version 6.0.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(610, 413)
MainWindow.setStyleSheet(u"background-color: rgb(203, 200, 201);")
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.button = QPushButton(self.centralwidget)
self.button.setObjectName(u"button")
self.button.setGeometry(QRect(250, 60, 75, 24))
self.button.setStyleSheet(u"background-color: rgb(141, 141, 141);")
self.ptxt = QTextEdit(self.centralwidget)
self.ptxt.setObjectName(u"ptxt")
self.ptxt.setGeometry(QRect(90, 130, 421, 41))
self.ptxt.setStyleSheet(u"background-color: rgb(255, 255, 255);")
self.ptxt_2 = QTextEdit(self.centralwidget)
self.ptxt_2.setObjectName(u"ptxt_2")
self.ptxt_2.setGeometry(QRect(90, 280, 421, 41))
self.ptxt_2.setStyleSheet(u"background-color: rgb(255, 255, 255);")
self.button_2 = QPushButton(self.centralwidget)
self.button_2.setObjectName(u"button_2")
self.button_2.setGeometry(QRect(250, 220, 75, 24))
self.button_2.setStyleSheet(u"background-color: rgb(141, 141, 141);")
MainWindow.setCentralWidget(self.centralwidget)
enter code here
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.button.setText(QCoreApplication.translate("MainWindow", u"Button 1", None))
self.button_2.setText(QCoreApplication.translate("MainWindow", u"Button 2", None))
# retranslateUi
############
main.py
############
from Gui import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow
from PyQt5 import QtWidgets
import time
import sys
class test(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.button.clicked.connect(self.testfunction1)
self.ui.button_2.clicked.connect(self.testfunction2)
def testfunction1(self):
time.sleep(5)
self.ui.ptxt.setPlainText("Hello 1")
def testfunction2(self):
time.sleep(5)
self.ui.ptxt_2.setPlainText("Hello 2")
if __name__ == '__main__':
program = QtWidgets.QApplication(sys.argv)
ui = test()
ui.show()
sys.exit(program.exec_())
解决方案
推荐阅读
- python-3.x - 如何以pythonic方式从两个向量中获取以下矩阵?
- laravel-5 - 在 where 方法中使用原始查询会在查询生成中出错
- ios - 在 iOS ViewControllers 中替换部分功能的好策略
- c# - asp页面中的ajax返回500
- javascript - 在 Google 引擎中使用 For 循环并输出图表或值表
- python - Numpy找到两个二维ndarray的协方差
- reactjs - prevState 在 componentDidUpdate 中显示更新状态
- c - k&r 中的“entab”锻炼计划
- amazon-cloudfront - 使用 Cloudfront 提供 HTTPS 但支持 HTTP 源
- javascript - 变量分配和范围