python - 从不同的进程对接 PyQt Windows
问题描述
我正在设计一个基于 PyQt 的应用程序,它有一些组件在 GUI 线程中做一些繁重的工作(实时绘制一些相对较大的数据集)。
我的经验是,当这种情况发生时,我的 GUI 的其他部分可能会有些反应迟钝——我也想运行多个线程并避免遇到旧的 GIL 问题。
为了解决这两个问题,我想将我的应用程序的各个部分作为单独的进程运行(使用多处理模块或启动通过套接字通信的并行 python 实例)。
我想知道是否有任何方法可以让其他进程的窗口停靠在我的主窗口中。
请求的最小示例:
sub_proc_a.py
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
sub_process_window = QtWidgets.QWidget()
sub_process_window.setWindowTitle("Dock Me!")
sub_process_window.show()
app.exec_()
master_proc.py
from PyQt5 import QtWidgets
from subprocess import Popen
app = QtWidgets.QApplication([])
main_window = QtWidgets.QMainWindow()
main_window.setWindowTitle("Main window")
main_window.show()
sub_proc_a = Popen("python sub_proc_a.py")
# HOW DO I GET HANDLES TO THE WINDOWS OPENED by sub_proc_a such that I can dock them?
app.exec_()
解决方案
在这个问题上工作了几周后,我找到了我正在寻找的东西:
本文档描述了在 Qt 中嵌入其他窗口: https ://gist.github.com/torarnv/c5dfe2d2bc0c089910ce
我在这里的另一个问题显示了通过 hwnd 值停靠小部件所需的大部分内容: Embedding native windows inside QDockWidget
推荐阅读
- python - 我对这段代码使用套接字接收多播的结论是否合理?
- c - STM32H7 SPI时钟频率,不随不同的BaudratePrescaler值变化
- php - 如何在 span 标签中添加 css 类作为回报
- javascript - Eslint 警告不允许我推动回购
- mysql - 我想在 mysql 中使用 join in codeigniter 来分隔值
- spring - 在 spring + hibernate 中保存 creationTimestamp 和 updatedTime
- python - 从源代码构建时,如何在 Colab 中永久安装诸如 opencv 之类的库?
- javascript - 在 VSCode 中,JSHint 警告缺少分号
- javascript - 如何将键值对转换为新的键值对javascript
- android-studio - 关于 Gradle 和许可证的 Android Studio 错误