《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文件在下载链接中

三、资源下载

下载链接

相关推荐
ShineWinsu17 分钟前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu1 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
ShineWinsu8 小时前
对于Qt:QDial常见属性以及信号的解析
开发语言·c++·qt·gui·客户端·旋钮·qdial
宛 禾18 小时前
Qt 事件系统完全指南:从事件循环到实战避坑
qt
敲上瘾1 天前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
MOONICK2 天前
QT元数据
开发语言·qt
橙橙笔记2 天前
QT的学习第四部分
linux·qt·学习·音视频
sycmancia3 天前
Qml——信号连接、自定义信号
qt
奇树谦5 天前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
wuyk5555 天前
PyQt6-第15讲-数据可视化QChart
python·ui·信息可视化·pyqt