《pyqt+open3d》open3d可视化界面集成到qt中
- 一、效果显示
- 二、代码
- 三、资源下载
一、效果显示
二、代码
参考链接
main.py
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
# -*- 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文件在下载链接中
三、资源下载
下载链接