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

Posted

技术标签:

【中文标题】如何使用 Mac OSX 在 Python 中生成线程和初始化 Qt 应用程序【英文标题】:How to spawn thread and initialize Qt Application in Python with Mac OSX 【发布时间】:2014-05-13 22:29:19 【问题描述】:

我目前在启动我的 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。

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

但也可以想象一个 mac 色轮光标(旋转的死亡沙滩球),屏幕截图没有捕捉到它。

【问题讨论】:

请注意,thread.join() 永远不会被调用,因为您的程序将在 app.exec_() 循环完成后立即退出。 【参考方案1】:

发生这种情况是因为您正在这样做:

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

当你真的想要这个时:

thread = Thread(target=engine.start)

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

【讨论】:

以上是关于如何使用 Mac OSX 在 Python 中生成线程和初始化 Qt 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OSX 终端中更改主要 python 版本

如何在 Python 中生成不同类型的图形?

如何在 python 中生成唯一的身份验证令牌?

如何根据需求在python中生成JWT

如何在python中生成数组的排列?

如何在 OSX 上为 Python 应用程序启用 App 沙箱(Python 应用程序针对 Mac App Store)