文章目录
尽管open3d是一个三维数据处理库,其主页介绍中提到的功能,也都类似三维数据结构、三维数据处理算法、平面对齐重构这种专业需求,但是尽管主页没提,open3d内部起始隐藏着一个非常强大的图形界面工具,足以开发针对三维数据的界面程序。
所以本文就初步认识一下open3d
的GUI工具。
窗口
import open3d as o3d
import open3d.visualization.gui as gui
import open3d.visualization.rendering as rendering
gui.Application.instance.initialize()
win = gui.Application.instance.create_window(
“Open3d Test”, 600, 350)
gui.Application.instance.run()
其中,initialize
用于初始化open3d的GUI功能,如不开启,则无法创建窗口。
create_window
用于创建窗口,其参数分别是窗口名、宽度、高度。在创建窗口之后,窗口会马上弹出,如下图所示,但这个窗口并不受控制。
只有在输入run
这行之后,这个窗口才能正常拖动和缩放。
控件
在了解窗口的调用逻辑之后,按照正常的GUI教学流程,应该讲一讲最常用的控件,比如文本标签、文本输入以及按钮。
首先看一下文本标签
app = gui.Application.instance
app.initialize()
win = app.create_window("Open3d Test", 500, 100)
label = gui.Label("input") #创建一个标签
win.add_child(label) #将标签插入窗口
app.run()
效果如下
由于不能指定绝对位置,所以创建的标签被放在了最左端。如果创建多个控件,那么这些控件会叠放在一起,是不合理的。
布局
为了让控件按照我们的要求来拜访,需要用到布局,下面以Vert
为例,来说明布局对控件的作用
app.initialize()
win = app.create_window("Open3d Test", 500, 100)
vert = gui.Vert(0, gui.Margins(2,2,2,2))
win.add_child(vert) # 将布局加载到窗口
label = gui.Label(“input”)
vert.add_child(label) # 将label添加到vert
txt = gui.TextEdit() #创建一个输入框
vert.add_child(txt)
btn = gui.Button(“click me”) #创建一个按钮
vert.add_child(btn)
app.run()
效果为
那么Vert
的含义也就明确了,就是将子控件按照纵向排布的方式插入到父控件中。
事件
尽管按钮上面写了click me
,但点击之后什么都不会发生,为了实践按钮的功能,可以在app.run
前添加下面的代码
# 让label的内容变为txt的内容
def click():
label.text = txt.text_value
#给按钮注册函数,即点击按钮时执行click
btn.set_on_clicked(click)
这样,在点击按钮之后,会将文本输入框中的内容添加到标签上,如图所示