如何使用 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OSX 上为 Python 应用程序启用 App 沙箱(Python 应用程序针对 Mac App Store)