在pyqt上执行多个线程

时间:2014-10-13 20:02:31

标签: python multithreading pyqt

我正在尝试执行两个并发进程,第一个进程不断计算(例如每0.1秒)麦克风记录的频率,而第二个进程计算频率并每隔0.5秒绘制一个表示。

我对如何实现线程感到有点困惑,我无法执行并行线程。

这是一段代码:

class MicrophoneThread(QtCore.QThread):
    def __init__(self):
        super(MicrophoneThread , self).__init__()

    def __del__(self):
        self.wait()

    def run(self):
        print("Microphone Thread")
        while True:
            time.sleep(0.1)  
            self.emit(SIGNAL('listen()'))     


class PaintThread(QtCore.QThread):
    def __init__(self, el):
        super(PaintThread , self).__init__(el)

    def __del__(self):
        self.wait()

    def run(self):           
        i = 0
        while True:
            i += 1               
            time.sleep(0.5)
            self.emit(QtCore.SIGNAL('update(QString)'), str(i))    

从MainWindow我实例化线程。

    threadOne = MicrophoneThread(self)
    self.connect(threadOne , QtCore.SIGNAL('listen()') , self.listen, Qt.DirectConnection) 
    threadOne.start() 


    threadTwo = PaintThread(self)

    self.connect(threadTwo , QtCore.SIGNAL('update(QString)') , self.changeIndicatorAngle, Qt.DirectConnection)
    self.connect(threadTwo , QtCore.SIGNAL('update(QString)') , self.changeNoteLabel, Qt.QueuedConnection)        
    threadTwo.start()  

只有MicrophoneThread启动,而第二个不起作用。

感谢您阅读的任何建议或文件。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题,问题很简单。

我在程序启动时实例化MainWindow中的第一个Thread,而我只在单击另一个表单上的按钮时才实例化第二个。

所以我有一个MainWindow,我在其中运行MicrophoneThread,另一个Form在我单击按钮时运行PaintThread。