我在Python应用程序中工作,在Raspberry Pi上使用PySide,使用Raspbian Jessie OS。你知道吗
我对Python很陌生,我根本不是专家。所以这可能是一个乞丐的问题。你知道吗
在我的申请中,我有:
在亚线程代码的某些地方,我需要发出一个必须被主线程捕获的信号。在以前的版本中,我是这样做的:
#Slot for clicked button
def Slot_Start_Calculation (self):
self.MyLongThread = QThread()
MyLongWorker = MyWorker(self, Qty)
MyLongWorker.moveToThread(self.MyLongThread)
self.MyLongThread.started.connect(MyLongWorker.Run_LongWorker)
MyLongWorker.WorkerFinished.connect(self.MyLongThread.quit)
MyLongWorker.WorkerFinished.connect(self.MyLongWorker.deleteLater)
MyLongThread.finished.connect(self.MyLongThread.deleteLater)
MyLongThread.start()
def Slot_Worker_Sent_A_Signal (self, Result):
print ("Worker sent this result: " + str(Result))
.
.
.
class MyWorker(QObject):
WorkerFinished = Signal()
CustomSignal = Signal(int)
def __init__(self, parent, Quantity)
super().__init__(parent)
self_parent = parent
self.Quantity = Quantity
print("Myworker's constructor")
def __del__(self):
print("Myworker's destructor")
def Run_LongWorker (self):
self.CustomSignal.connect(self.parent.Slot_Worker_Sent_A_Signal)
.
.
.
self.CustomSignal.emit(MyPartialResult)
.
.
.
self.WorkerFinished.emit()
这段代码在几周前的测试环境中运行,我完成了GUI的一些细节,没有发现任何错误。 昨天在网上搜索时,我偶然发现QObject::moveToThread不能移动有父对象的对象
https地址:[//forum.qt.io/topic/40653/qobject-movetothread-cannot-move-objects-with-a-parent][1]
所以我担心我的代码可能有问题,我还没有发现。你知道吗
我修改了这部分代码,现在是:
#New slot for clicked button.
def Slot_Start_Calculation (self):
MyLongThread = QThread()
MyLongWorker = MyWorker(Qty)
MyLongWorker.moveToThread(MyLongThread)
MyLongThread.started.connect(MyLongWorker.Run_LongWorker)
MyLongWorker.WorkerFinished.connect(MyLongThread.quit)
MyLongWorker.WorkerFinished.connect(MyLongWorker.deleteLater)
MyLongThread.finished.connect(MyLongThread.deleteLater)
MyLongThread.start()
def Slot_Worker_Sent_A_Signal (self, Result):
print ("Worker sent this result: " + str(Result))
.
.
.
class MyWorker(QObject):
WorkerFinished = Signal()
CustomSignal = Signal(int)
def __init__(self, Quantity)
super().__init__()
self.Quantity = Quantity
print("Myworker's constructor")
def __del__(self):
print("Myworker's destructor")
def Run_LongWorker (self):
self.CustomSignal.connect( ??? .Slot_Worker_Sends_A_Signal)
.
.
.
self.CustomSignal.emit(MyPartialResult)
.
.
.
self.WorkerFinished.emit()
所以,现在,我真的不知道如何将这个信号连接到主线程中的一个插槽,因为如果我没有错的话,自从我更改了线程关联性之后,就没有父/子关系了。你知道吗
有人能告诉我是否有办法做到这一点,并指导我对这个问题的文档?你知道吗
非常感谢。你知道吗
最后,我想我找到了答案。在Worker类的构造函数中,我必须更改父对象引用和超类init调用。你知道吗
现在一切都按预期进行。你知道吗
如果有人看到代码有问题,请随时告诉我。你知道吗
谢谢!你知道吗
相关问题 更多 >
编程相关推荐