如何使用Mac OSX在Python中生成线程并初始化Qt应用程序

时间:2014-05-13 22:29:20

标签: python multithreading macos qt pyqt

我正在尝试在启动qt应用程序时在python中生成线程时遇到问题。这段代码中的想法是生成一个python线程,它将循环一个函数,然后初始化我的QT应用程序。

import sys 
from PyQt4 import QtGui
from pyui import DirectGui
from engines import KCluster_Engine
from threading import Thread

def main():

    app = QtGui.QApplication(sys.argv)
    dgui = DirectGui()
    engine = KCluster_Engine(4, 5)
    dgui.set_engine_ref(engine)
    engine.assign_interface(dgui)
    thread = Thread(target = engine.start())
    thread.start()
    sys.exit(app.exec_())
    thread.join()

if __name__ == '__main__':
    main()

这背后的问题是我无法使用我的Qt GUI。我的mac给了我一个色轮,表明我生成的线程正在旋转,它应该这样做,但我不能使用我的QtApplication。

我的线程在一个while循环中故意旋转,它只能在GUI上的某些操作完成后触发,但是我无法与我的GUI交互作为mac色轮(旋转死亡的沙滩球) )阻止我这样做。

But Imagine a mac color wheel cursor also, screenshot doesn't capture it.

但是想象一下mac色轮光标(旋转死亡的沙滩球),截图也没有抓住它。

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您正在执行此操作:

thread = Thread(target = engine.start())

当你真的想要这个时:

thread = Thread(target=engine.start)

您在主线程中意外调用了engine.start(),因此您的程序陷入了在该方法中运行的无限循环中。