《pyqt+open3d》open3d可视化界面集成到qt中

《pyqt+open3d》open3d可视化界面集成到qt中

一、效果显示

二、代码

参考链接

main.py

python 复制代码
import sys
import open3d as o3d
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtGui import QWindow
from PyQt5.QtCore import QTimer
import win32gui
import MainWindow

class MainWindows(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindows, self).__init__(parent)
        self.ui = MainWindow.Ui_MainWindow()
        self.ui.setupUi(self)
        self.vis = o3d.visualization.Visualizer()
        self.vis.create_window(visible=False)  # visible=False窗口不显示,避免启动时一闪而过
        self.winid = win32gui.FindWindow('GLFW30', None)
        self.sub_window = QWindow.fromWinId(self.winid)
        self.displayer = QWidget.createWindowContainer(self.sub_window)
        self.ui.gridLayout.addWidget(self.displayer)
        self.clock = QTimer(self)
        self.clock.timeout.connect(self.draw_update)
        self.clock.start(20)
        self.draw_test()

    def draw_test(self):
        pcd = o3d.io.read_point_cloud('output1.ply')  # 点云路径
        self.vis.add_geometry(pcd)
        self.vis.update_geometry(pcd)

    def draw_update(self):
        self.vis.poll_events()
        self.vis.update_renderer()

    def __del__(self):
        # self.clock.stop()      #这一行其实并不需要
        self.vis.destroy_window()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindows()
    window.show()
    sys.exit(app.exec_())

mainWindow.py

python 复制代码
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

ui文件在下载链接中

三、资源下载

下载链接

相关推荐
寻找华年的锦瑟7 小时前
Qt-视频九宫格布局
开发语言·qt
雨田哥8 小时前
Qt AFSim雷达探测显示
qt·afsim·qt雷达·qt仿真·雷达显控端·qt雷达模拟器
努力的ping8 小时前
qt信号和槽
开发语言·qt
AGANCUDA8 小时前
qt中vtk显示pcl的点云类
开发语言·qt
xxp432110 小时前
Qt 网络编程 TCP通信
开发语言·qt
开始了码10 小时前
QT::鼠标事件简单介绍
qt
AGANCUDA15 小时前
qt使用osg显示pcd点云的例子
开发语言·qt
寻找华年的锦瑟16 小时前
Qt-侧边栏布局
开发语言·qt
柳鲲鹏16 小时前
QT多语言:使用Linguist处理文本资源
前端·javascript·qt
tyler-泰勒16 小时前
QT:基础概念操作
开发语言·qt