如何在PyQt5风中嵌入pptk查看器

2024-05-28 20:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用PyQt5(Qt设计器)构建一个GUI程序,它还使用pptk library。这个库可以绘制大量的点,这对我来说非常有趣(显示有限元后处理结果)。

正如在this post中所解释的,pptk中的查看器类是一个独立的窗口。像上一篇文章的作者一样,我希望在我的GUI中嵌入查看器。看来我需要写些包装纸。经过一些研究,我仍然不知道这是否意味着我必须看里面的C++代码来重写一些东西。那样的话,事情就比我想象的要复杂,我不得不暂时放弃。最后,如果我能创建一个可以集成在主窗口中的查看器小部件,那就太完美了。

有人能帮我解释一下我要经历什么吗?


Tags: 代码程序文章library绘制gui作者this
2条回答

下面是一个演示脚本,演示如何将查看器添加到布局中。我不能在Windows上测试它,但是在Linux上(没有win32gui部分),我得到如下结果。正如您所见,没有奇怪的边界,窗口可以像正常一样自由调整大小。在

enter image description here

from PyQt5 import QtWidgets, QtGui
import numpy as np
import pptk
import win32gui
import sys

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        widget = QtWidgets.QWidget()
        layout = QtWidgets.QGridLayout(widget)
        self.setCentralWidget(widget)

        self.cloudpoint = np.random.rand(100, 3)
        self.v = pptk.viewer(self.cloudpoint)
        hwnd = win32gui.FindWindowEx(0, 0, None, "viewer")
        self.window = QtGui.QWindow.fromWinId(hwnd)    
        self.windowcontainer = self.createWindowContainer(self.window, widget)

        layout.addWidget(self.windowcontainer, 0, 0)

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    app.setStyle("fusion")
    form = MainWindow()
    form.setWindowTitle('PPTK Embed')
    form.setGeometry(100, 100, 600, 500)
    form.show()
    sys.exit(app.exec_())

我从一开始就是这么做的:

# imports
from PyQt5 import QtWidgets, QtGui
import numpy as np
import pptk
import win32gui
import sys

# local imports
from designer import Ui_MainWindow


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)

        self.cloudpoint = np.random.rand(100, 3)
        self.v = pptk.viewer(self.cloudpoint)                # generate the viewer window
        hwnd = win32gui.FindWindowEx(0, 0, None, "viewer")   # retrieve the window ID of the viewer
        self.window = QtGui.QWindow.fromWinId(hwnd)          # get the viewer inside a window

        # embed the window inside the centralwidget of the MainWindow :
        self.windowcontainer = self.createWindowContainer(self.window, self.centralwidget)

        # finally, resize the container as you wish.
        self.windowcontainer.resize(self.width() - 100 , self.height() - 100)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle("fusion")
    form = MainWindow()
    form.show()
    sys.exit(app.exec_())

设计器是从QtDesigner(QMainWindow及其QWidget centralwidget)中简单地创建的。我只是保存了草稿,转换成了一个.py文件。在

我得到的是:

Embedded pptk viewer

在窗口容器的两侧仍然有黑色的条,我还没有发现如何使它们消失。在

相关问题 更多 >

    热门问题