我想要一个 Python 可访问的函数show_image(...)
,它启动一个相当简单的图像查看器,其中图像被指定为(例如)NumPy 数组。重要的是,我希望这个函数不要阻塞,而是让脚本继续执行,同时保持窗口的交互性。
我意识到巨大的设计缺陷和被称为全局解释器锁的痛苦将阻止任何与主线程中的 Python 代码并行运行的基于 Python 的 GUI,所以我显然需要启动一个线程来释放 GIL 并在 C/C++ 中执行所有操作。
我很乐意用 Cython(或手写的 C 扩展模块)包装这样的东西,但我正在寻找合适的 GUI 解决方案。它应该是跨平台的,并且易于与Cython扩展一起构建(后者似乎排除了Qt/qmake/等)。
重要的是,我希望能够以这种方式按需启动多个窗口。似乎大多数 GUI 工具包都有一些类似run()
的功能,需要在主线程程序main()
结束时调用,这让我不太清楚如何多次启动窗口。我想我每次都可以启动一个单独的 GUI 事件循环,但这似乎是灾难的秘诀(我记得,至少 GTK+ 明确不支持它)。
我还要说,fork()
不是一种选择。
个人使用os.system("xv foo.png &")
,或任何小型图像查看器。 根据详细信息,您还可以执行g = os.popen("xv - &", "w")
并将图像数据写入文件g
。 同样,根据细节,我有时会使我的程序成为Web服务器(几十行代码,例如使用Twisted),从那里提供图像,并在Web浏览器中查看它们。 我的观点是你根本不需要任何GUI或多线程。