根据这个例子:link,我想在GUI中实现一个基于线程的小应用程序。我有两个文件TestMain.py
和TestManager.py
(工作者类),它们通过sys.path.append('...')
相互连接。在TestMain.py
中,我加载了我的GUI,创建了线程和信号/插槽连接,这些连接作用于TestManager.py
中的函数。在TestManager.py
我做了一些计算,并希望同时在QTextEditor
中对它们进行可视化。为此,我编写了以下代码:
TestMain.py
sys.path.append('../app/source')
from TestManager import *
class TestMain(QMainWindow):
def __init__(self, parent= None):
super(TestMain, self).__init__(parent)
self.manager= TestManager()
self.thread= QThread()
self.manager.moveToThread(self.thread)
self.manager.finished.connect(self.thread.quit)
self.thread.started.connect(self.manager.first_slot)
self.thread.start()
self.manager.printFirstSignal.connect(self.print_onTextEdit)
self.offlinePushButton.clicked.connect(self.offline_slot)
def offline_slot(self):
manager.do_some_calc(self)
def print_onTextEdit(self, str):
self.outputTextEdit.append(str)
Manager.py
sys.path.append('../app/source')
from TestMain import *
class TestManager(QObject): #QtCore.QThread
finished= pyqtSignal()
printFirstSignal= pyqtSignal(str)
def __init__(self, parent= None):
super(TestManager, self).__init__(parent)
def first_slot(self):
self.printFirstSignal.emit('TEST')
self.finished.emit()
def do_some_calc(self):
do_someting()
TestManager.first_slot("do_some_calc")
如果我在self.thread.started.connect(self.manager.first_slot)
中TestMain
并在pyqtSignal
中的first_slot()
中发出TestManager
,那么我可以毫无问题地更新我的GUI。但是如果我在do_some_calc()
中调用一个插槽(例如TestManager
)并且想要从那里更新GUI,那么我就会遇到分段错误。即使我为此功能创建单独的信号,它也不起作用。因为我在TestMain
self.offlinePushButton.clicked.connect(self.offline_slot)
我的问题是。如何在TestManager
内部或MainTest
调用任何函数,以便我仍然可以更新GUI?
感谢您提出任何建议