首页 > 解决方案 > 如何避免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_())

标签: pythonqthread

解决方案


推荐阅读