你能在OSX上的PyQt5 GUI中嵌入一个外部应用程序吗?

时间:2018-03-20 22:49:53

标签: qt pyqt4 pyqt5

我正在开发一个应用程序,该应用程序使用第三方软件运行可视化,并通过PyQt5 GUI发送命令和执行其他操作。此时,PyQt5窗口和可视化都在不同的窗口上运行,但是我想在某些时候合并它们,使它看起来像一个窗口。要做到这一点,我试着做一个简单的例子。以下是在Mac上生成计算器应用程序的代码和一个包含一些文本标签的简单窗口:

import os
import sys
import subprocess
import atexit
from PyQt5 import QtWidgets


class CalcWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(CalcWindow, self).__init__()
        self.setWindowTitle("Embedded Calc")
        lines_widget = LinesWidget()
        self.setCentralWidget(lines_widget)
        calc_path = "/Applications/Calculator.app/Contents/MacOS/Calculator"
        print("Path = " + calc_path)
        print("Exists: " + str(os.path.exists(calc_path)))
        p = subprocess.Popen(calc_path)
        atexit.register(self.kill_proc, p)

    @staticmethod
    def kill_proc(proc):
        try:
            proc.terminate()
        except Exception:
            pass


class LinesWidget(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()
        self.vLayout = QtWidgets.QVBoxLayout()
        self.line1 = QtWidgets.QHBoxLayout()
        self.line1.addWidget(QtWidgets.QLabel("HELLO"))
        self.line1.addWidget(QtWidgets.QLabel("WORLD"))
        self.line2 = QtWidgets.QHBoxLayout()
        self.line2.addWidget(QtWidgets.QLabel("SUP"))
        self.line2.addWidget(QtWidgets.QLabel("DAWG"))
        self.vLayout.addLayout(self.line1)
        self.vLayout.addLayout(self.line2)
        self.setLayout(self.vLayout)


def main():
    app = QtWidgets.QApplication(sys.argv)
    calc = CalcWindow()
    calc.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

我希望计算器与主窗口中的文本标签分开。我已经使用hwnd在Windows上看到了它,但我不知道如何将其直接转换为OSX,或者甚至可能。也许有一些PyQt魔法将可执行文件抛出到一个小部件中并将其添加到可以工作的主窗口中。不确定。任何帮助,将不胜感激。谢谢。

0 个答案:

没有答案
相关问题