我的代码中有类似的内容,我想在等待完成过程时显示加载的gif。我尝试了发现的该线程,但是不断收到此错误消息:
QObject:无法为处于不同线程中的父级创建子级。
这是我的代码示例
from PyQt5 import QtWidgets, uic
from PyQt5.Qt import Qt
from PyQt5.QtCore import QByteArray, QSize, QRunnable,
QThreadPool, pyqtSlot
from PyQt5.QtGui import QMovie
from PyQt5.QtWidgets import QPushButton
import main2 as main_framework
class Worker(QRunnable):
def __init__(self, fn, *args, **kwargs):
super(Worker, self).__init__()
self.fn = fn
self.args = args
self.kwargs = kwargs
@pyqtSlot()
def run(self):
self.fn(*self.args, **self.kwargs)
class Ui_Login(QtWidgets.QDialog, QPushButton):
def __init__(self):
super(Ui_Login, self).__init__()
uic.loadUi("gui/loginpage.ui", self)
self.frame_loadinggif.setVisible(False)
self.btn_signin.clicked.connect(self.signin)
self.btn_close.clicked.connect(self.signout)
self.threadpool = QThreadPool()
def task(self):
print("in")
form = main_framework.Ui_MainWindow()
form.show()
self.btn_signin.setEnabled(True)
self.hide()
def loadinggif(self):
self.frame_loadinggif.setVisible(True)
self.gif = QMovie("images/ajax-loader.gif", QByteArray(), self)
self.lbl_loading_gif.setMovie(self.gif)
self.gif.setScaledSize(QSize().scaled(25, 25, Qt.KeepAspectRatio))
self.gif.start()
def signin(self):
print("processing")
self.loadinggif()
worker = Worker(self.task)
self.threadpool.start(worker)
self.btn_signin.setEnabled(False)
def signout(self):
print("out")
sys.exit()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ui = Ui_Login()
ui.show()
sys.exit(app.exec())