我目前正在构建一个同时显示列表和图像的GUI,我也想同时显示当前周围环境的点云,并能够访问该GUI中的所有内容。
我尝试过VTK可视化工具,问题是渲染循环会阻塞其他所有内容,直到窗口关闭。
我目前正在尝试使用PyQtGraph的GLViewWidget,但无法将其插入所需的位置,并且无法处理GUI中的其他项目。
我必须将窗口指定为父窗口,才能看到窗口小部件。但是它跳到了窗口的左上角。
def init_gui(self, win_height=800, win_width=1800):
#self.w = self
#self.w.scene().sigMouseClicked.connect(self.mousePressEvent) #mouseMoveEvent
#self.w.scene().sigMouseMoved.connect(self.mouseMoveEvent)
pg.setConfigOptions(imageAxisOrder='row-major')
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
self.w = pg.GraphicsWindow(size=(win_width,win_height), border=True)
self.list_imgs = QtGui.QListWidget()
self.list_marks = QtGui.QListWidget()
self.btn_Del_Mark = QtGui.QPushButton('Del Mark')
self.btn_MarkPed = QtGui.QPushButton('Mark ped')
self.btn_MarkCycl = QtGui.QPushButton('Mark cyc')
self.btn_MarkCar = QtGui.QPushButton('Mark car')
self.btn_Rst = QtGui.QPushButton('Reset JSON')
self.btn_Save = QtGui.QPushButton('Save JSON')
self.btn_Next = QtGui.QPushButton('Next ->')
self.btn_Back = QtGui.QPushButton('Back <-')
self.btn_Predict_2D = QtGui.QPushButton('Predict 2D')
self.btn_Predict_3D = QtGui.QPushButton('Predict 3D')
self.btn_Pipeline = QtGui.QPushButton('Run Pipeline')
self.lbl_list1 = QtGui.QLabel()
self.lbl_list2 = QtGui.QLabel()
self.lbl_img_path = QtGui.QLabel()
self.lbl_list1.setText("Images")
self.lbl_list2.setText("Markings")
self.w.setWindowTitle('Visualizing traffic situation')
self.vb = pg.ViewBox()
self.vb.setAspectLocked()
self.img = pg.ImageItem()
self.vb.addItem(self.img)
self.vb.invertY(True)
layout = pg.GraphicsLayout()
self.lbl_list1.setAlignment(QtCore.Qt.AlignCenter)
self.lbl_list2.setAlignment(QtCore.Qt.AlignCenter)
#self.qgwidg = QtGui.Qg
self.graph_3d = gl.GLViewWidget(parent=self.w)
self.graph_3d.opts['distance'] = 20
self.graph_3d.show()
self.graph_3d.setParent(self.w)
#self.graph_3d.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
self.graph_3d.setMinimumSize(800, 400)
offset_grp_1 = 2
offset_grp_2 = 3
offset_grp_3 = 4
layout.addItem(self.vb , 1, 9, 6, 20)
layout.addItem(self.proxyWidget(self.graph_3d, width=(600), height=(500)), 10, 3, 10, 20)
layout.addItem(self.proxyWidget(self.lbl_list1 , width=(int(1./10.*win_width)), height=(int(0.9/20.*win_height))), 0,1,1,1)
layout.addItem(self.proxyWidget(self.lbl_list2 , width=(int(1./10.*win_width)), height=(int(0.9/20.*win_height))), 0,2,1,1)
layout.addItem(self.proxyWidget(self.lbl_img_path , height=(int(0.9/20.*win_height))), 0,3,1,20)
layout.addItem(self.proxyWidget(self.list_imgs , width=(int(1./10.*win_width))), 1,1,20,1)
layout.addItem(self.proxyWidget(self.list_marks , width=(int(1./10.*win_width))), 1,2,20,1)
layout.addItem(self.proxyWidget(self.btn_Next , width=(int(1./10.*win_width))), 0+offset_grp_1,0)
layout.addItem(self.proxyWidget(self.btn_Back , width=(int(1./10.*win_width))), 1+offset_grp_1,0)
layout.addItem(self.proxyWidget(self.btn_Predict_2D, width=(int(1./10.*win_width))), 2+offset_grp_2,0)
layout.addItem(self.proxyWidget(self.btn_Predict_3D, width=(int(1./10.*win_width))), 3+offset_grp_2,0)
layout.addItem(self.proxyWidget(self.btn_Pipeline , width=(int(1./10.*win_width))), 4+offset_grp_2,0)
layout.addItem(self.proxyWidget(self.btn_MarkPed , width=(int(1./10.*win_width))), 5+offset_grp_3,0)
layout.addItem(self.proxyWidget(self.btn_MarkCycl , width=(int(1./10.*win_width))), 6+offset_grp_3,0)
layout.addItem(self.proxyWidget(self.btn_MarkCar , width=(int(1./10.*win_width))), 7+offset_grp_3,0)
layout.addItem(self.proxyWidget(self.btn_Del_Mark , width=(int(1./10.*win_width))), 8+offset_grp_3,0)
layout.addItem(self.proxyWidget(self.btn_Rst , width=(int(1./10.*win_width))), 9+offset_grp_3,0)
layout.addItem(self.proxyWidget(self.btn_Save , width=(int(1./10.*win_width))), 10+offset_grp_3,0)
self.w.addItem(layout)
self.setUp_pen_types()
self.qt_connections()
结果看起来像这样-尽管我想将渲染的3D场景(具有黑色背景色)放置在2D图像小部件下方。