Open3d GUI 之对话框

文章目录

    • 对话框
    • 关闭对话框
    • 文件对话框

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的按钮就在对话框中,但是这个按钮并没有封装任何方法,所以对话框也只能孤零零地在窗口中间,动弹不得,甚至关都关不掉。

Open3d GUI 之对话框_第1张图片

关闭对话框

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

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()

效果如下

Open3d GUI 之对话框_第2张图片

由于无论是窗口还是对话框,都未作布局上的调整,所以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()

效果如下

Open3d GUI 之对话框_第3张图片

你可能感兴趣的:(#,open3d,open3d,GUI,python,点云,对话框)