Open3d GUI 之对话框

2024-01-07 19:48:25


Open3d快速上手💎 点云对象详解

对话框

open3d中的对话框用gui.Dialog来实现,但这个对话框其实只有个框,并没有对话,需要人为地进行布局规划。

如果单纯地希望演示一下对话框,那么只需

import open3d as o3d
import open3d.visualization.gui as gui
import open3d.visualization.rendering as rendering
app = gui.Application.instance

app.initialize()
win = app.create_window("Dialog Test", 600, 200)
dlg = gui.Dialog("Open3d dialog test")
dlg.add_child(gui.Button("OK"))
win.show_dialog(dlg)

app.run()

如下图所示那个OK的按钮就在对话框中,但是这个按钮并没有封装任何方法,所以对话框也只能孤零零地在窗口中间,动弹不得,甚至关都关不掉。

在这里插入图片描述

关闭对话框

为了动态展示对话框的弹出和关闭功能,需要现在窗口中封装一个可以打开对话框的按钮

app.initialize()
win = app.create_window("Dialog Test", 600, 300)
btn = gui.Button("open Dialog")
win.add_child(btn)
btn.set_on_clicked(btn_open_dialog)

def btn_open_dialog():
    dlg = gui.Dialog("Dialog Test")
    close = gui.Button("Close")
    close.set_on_clicked(btn_close_dialog)
    dlg.add_child(close)
    win.show_dialog(dlg)

def btn_close_dialog():
    win.close_dialog()
    pass

app.run()

效果如下

在这里插入图片描述

由于无论是窗口还是对话框,都未作布局上的调整,所以open Dialog按钮覆盖了整个窗口,而Close按钮也是完全覆盖了对话框。但二者的功能被很好地体现出来,点击窗口中的按钮弹出对话框,点击对话框中的按钮,对话框被关闭。

文件对话框

在日常使用中,对话框出现最多的场景就是打开文件,这个对话框至少要包括一个用以显示文件的列表。而open3d中也提供了文件对话框,尽管体验一般,但无论是打开还是保存文件,都应付得来。

FileDialog在初始化时,共有三个输入参数,分别表示对话框的模式、窗口名称以及风格。

其中,对话框模式共有三种

  • OPEN 打开文件
  • OPEN_DIR 打开文件夹
  • SAVE 保存文件

另外,和普通的对话框不同,文件对话框默认载入了两个按钮,分别通过set_on_doneset_on_cancel来挂载回调函数。

以打开文件夹为例,由于其功能就是打开文件,故可通过add_filter来选择文件类别,示例如下

import open3d as o3d
import open3d.visualization.gui as gui
import open3d.visualization.rendering as rendering
app = gui.Application.instance

app.initialize()

win = app.create_window("Dialog Test", 600, 300)
def btn_cancel():
    win.close_dialog()

def btn_done(fName):
    print(fName)
    win.close_dialog()

def btn_open_dialog():
    dlg = gui.FileDialog(gui.FileDialog.OPEN,
        "Dialog Test", win.theme)
    dlg.add_filter(".pcd", "Point Cloud Data files (.pcd)")
    dlg.set_on_cancel(btn_cancel)
    dlg.set_on_done(btn_done)
    win.show_dialog(dlg)

btn = gui.Button("open Dialog")
win.add_child(btn)
btn.set_on_clicked(btn_open_dialog)
app.run()

效果如下

在这里插入图片描述

文章来源:https://blog.csdn.net/m0_37816922/article/details/127312881
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。