from PySide import QtGui from PySide import QtCore # This is a "light" version of the SearchBox implementation, which loads the actual implementation on first click class SearchBoxLight(QtGui.QLineEdit): resultSelected = QtCore.Signal(int, int) def __init__(self, getItemGroups, getToolTip, getItemDelegate, maxVisibleRows = 20, parent = None): self.isInitialized = False # Store arguments self.getItemGroups = getItemGroups self.getToolTip = getToolTip self.getItemDelegate = getItemDelegate self.maxVisibleRows = maxVisibleRows # Call parent constructor super(SearchBoxLight, self).__init__(parent) # Connect signals and slots self.textChanged.connect(self.filterModel) # Thanks to https://saurabhg.com/programming/search-box-using-qlineedit/ for indicating a few useful options ico = QtGui.QIcon(':/icons/help-browser.svg') #ico = QtGui.QIcon(':/icons/WhatsThis.svg') self.addAction(ico, QtGui.QLineEdit.LeadingPosition) self.setClearButtonEnabled(True) self.setPlaceholderText('Search tools, prefs & tree') self.setFixedWidth(200) # needed to avoid a change of width when the clear button appears/disappears def lazyInit(self): pass def __getattr__(self, name): import types def f(*args, **kwargs): import SearchBox SearchBox.SearchBox.lazyInit(self) return getattr(SearchBox.SearchBox, name)(*args, **kwargs) return types.MethodType(f, self) def focusInEvent(self, *args, **kwargs): return self.proxyFocusInEvent(*args, **kwargs) def focusOutEvent(self, *args, **kwargs): return self.proxyFocusOutEvent(*args, **kwargs) def keyPressEvent(self, *args, **kwargs): return self.proxyKeyPressEvent(*args, **kwargs) def onSelectionChanged(self, *args, **kwargs): return self.proxyOnSelectionChanged(*args, **kwargs) def filterModel(self, *args, **kwargs): return self.proxyFilterModel(*args, **kwargs) def listDown(self, *args, **kwargs): return self.proxyListDown(*args, **kwargs) def listUp(self, *args, **kwargs): return self.proxyListUp(*args, **kwargs) def listPageDown(self, *args, **kwargs): return self.proxyListPageDown(*args, **kwargs) def listPageUp(self, *args, **kwargs): return self.proxyListPageUp(*args, **kwargs) def listEnd(self, *args, **kwargs): return self.proxyListEnd(*args, **kwargs) def listStart(self, *args, **kwargs): return self.proxyListStart(*args, **kwargs) def listAccept(self, *args, **kwargs): return self.proxyListAccept(*args, **kwargs) def listAcceptToggle(self, *args, **kwargs): return self.proxyListAcceptToggle(*args, **kwargs) def listCancel(self, *args, **kwargs): return self.proxyListCancel(*args, **kwargs)