2014-10-10 60 views
0

我使用Pyqt4在python中制作GUI。我想从主GUI发送一个信号到一个线程来实现一个功能。我知道如何从线程向主GUI发送信号,但我不知道相反的事情。另外我想通过一个信号变量。从主函数发送一个信号到一个线程?

类似:

class MainGUI() 
    def function 
     value = 5 
     self.emit(QtCore.Signal("Signal(int)"),value) 


class thread(QtCore.QThread) 
    def _init_(self) 
      Qtcore.QThread._init_() 
      self.connect(Qt.SIGNAL("Signal(int)"),self.run()) 

    def run(self,value): 
     time.sleep(value) 

所以每次的信号从主界面我想不结冰的GUI运行在并行线程功能传输时间。

任何帮助,将不胜感激, 喷气

回答

1

正确的方法是创建将被移动到线程对象。你不需要子类QtCore.QThread

或多或少类似的东西(免责声明:我比Python的C++):

myThread = QtCore.QThread() 
testObject = YourClassWithSlots() # NO PARENT HERE 
testObject.moveToThread(myThread) 
myThread.start() 

从这一点testObject所有连接插槽(使用默认连接类型)将在线程myThread运行。

相关链接:


更多细节请@Ezee

class YourClassWithSlots(QtCore.QObject) : 
    @Slot(int) 
    def havyTaskMethod(self, value) : 
     # long runing havy task 
     time.sleep(value) 

self.myThread = QtCore.QThread(self) 
self.testObject = YourClassWithSlots() # NO PARENT HERE 
self.testObject.moveToThread(myThread) # this makes slots to be run in specified thread 
self.myThread.start() 
self.connect(Qt.SIGNAL("Signal(int)"), self.testObject.havyTaskMethod) 
+0

问题是关于发送信号而不是使用线程。所以这不是一个答案。在这种情况下,OP的下一个问题将是“如何从移动到另一个线程的对象发送信号” – Ezee 2014-10-10 08:41:33

+0

阅读链接我在投票之前给出的。显然你喜欢复仇。请注意,即使经过编辑,您的答案也很糟糕。 @Jetmir应该理解信号和插槽的功能(也是你自己),那么他的问题将是微不足道的解决。 – 2014-10-10 09:02:36

+0

链接可以导致更多信息,但不会得到答案。添加回答OP问题的内容,并将删除投票。考虑更有礼貌。 – Ezee 2014-10-10 09:06:51

相关问题