首页 > 解决方案 > 从不同的进程对接 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_()

标签: pythonpyqtdockmultiprocessgil

解决方案


在这个问题上工作了几周后,我找到了我正在寻找的东西:

本文档描述了在 Qt 中嵌入其他窗口: https ://gist.github.com/torarnv/c5dfe2d2bc0c089910ce

我在这里的另一个问题显示了通过 hwnd 值停靠小部件所需的大部分内容: Embedding native windows inside QDockWidget


推荐阅读