I would like to know how I can implement a Selection Observer like the one from here into my Qt interface so that the user can select edges on the 3D view and add them to a QListWidget. I've seen this functionality in many tools from FreeCAD. Here's what I have so far:
Code: Select all
import FreeCAD
from PySide import QtGui, QtCore
class SelObserver:
def addSelection(self):
sel = FreeCADGui.Selection.getSelectionEx()[0].SubElementNames[0]
# ...
# return selected edge (sel) so it can be added to list:
# self.edges_list.addItem(sel)
# ...
FreeCADGui.Selection.removeObserver(s)
s = SelObserver()
class GuiDialog(QtGui.QDialog):
def __init__(self):
super(GuiDialog, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle(" ")
self.setFixedSize(175,215)
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
self.add_edge = QtGui.QPushButton('Add Edge', self)
self.edges_list_label = QtGui.QLabel("Edges:", self)
self.edges_list = QtGui.QListWidget(self)
self.cancel = QtGui.QPushButton('Cancel', self)
self.add_edge.clicked.connect(self.addObject)
self.cancel.clicked.connect(self.onCancel)
self.add_edge.move(10,10)
self.add_edge.resize(150, 25)
self.edges_list_label.move(10,45)
self.edges_list.move(10,60)
self.edges_list.resize(155,110)
self.cancel.move(90,180)
self.show()
def onCancel(self):
self.close()
def addObject(self, sel):
FreeCADGui.Selection.addObserver(s)
gui = GuiDialog()
gui.exec_()
OS: Windows 10 Version 2009
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 2022.402.28566 (Git)
Build type: Release
Branch: LinkStage3
Hash: 0da0525ba7ff10c9efe0476d35ffcdf040ed470d
Python version: 3.8.6+
Qt version: 5.15.2
Coin version: 4.0.1
OCC version: 7.5.0
Locale: English/Germany (en_DE)