从主函数向线程发送信号?

时间:2014-10-10 06:55:08

标签: python multithreading qt

我正在使用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传输信号时,我都希望并行运行线程中的函数而不冻结GUI。

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

1 个答案:

答案 0 :(得分: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)