def contextMenuEvent(self, ev: QContextMenuEvent): ''' Contextmenuevent Parameters ---------- ev : QContextMenuEvent ''' ev.accept() self.d.drag_start_mouse_position = ev.pos() menu = QMenu(self) menu.addAction("Detach", self.on_detach_action_triggered) menu.addSeparator() action = menu.addAction("Close", self.close_requested) action.setEnabled(self.is_closable()) menu.addAction("Close Others", self.close_other_tabs_requested) menu.exec(self.mapToGlobal(ev.pos()))
def on_custom_context_menu_requested(pos: QPoint): index: QModelIndex = self.indexAt(pos) if index.isValid(): item = index.internalPointer() if isinstance(item, IMCFileModel): menu = QMenu() close_action_icon = self.window().style().standardIcon( QStyle.SP_DialogCloseButton, widget=self) close_action = menu.addAction(close_action_icon, 'Close') if menu.exec(self.mapToGlobal(pos)) == close_action: self.events.imc_file_closed.emit(item)
class FilterWidget(filterBase): __clsName = "LocFilter" filterChangeDelay = 200 varNameRex = re.compile(r"\{(\w*)\}") def tr(self, string): return QCoreApplication.translate(self.__clsName, string) def __init__(self, parent=None): super().__init__(parent) self._ui = filterClass() self._ui.setupUi(self) self._delayTimer = QTimer(self) self._delayTimer.setInterval(self.filterChangeDelay) self._delayTimer.setSingleShot(True) if not (qtpy.PYQT4 or qtpy.PYSIDE): self._delayTimer.setTimerType(Qt.PreciseTimer) self._delayTimer.timeout.connect(self.filterChanged) self._ui.filterEdit.textChanged.connect(self._delayTimer.start) self._menu = QMenu() self._menu.triggered.connect(self._addVariable) filterChanged = Signal() @Slot(list) def setVariables(self, var): self._menu.clear() for v in var: self._menu.addAction(v) def setFilterString(self, filt): self._ui.filterEdit.setPlainText(filt) @Property(str, fset=setFilterString, doc="String describing the filter") def filterString(self): s = self._ui.filterEdit.toPlainText() return self.varNameRex.subn("\\1", s)[0] def getFilter(self): filterStr = self.filterString filterStrList = filterStr.split("\n") def filterFunc(data): filter = np.ones(len(data), dtype=bool) for f in filterStrList: with suppress(Exception): filter &= data.eval(f, local_dict={}, global_dict={}) return filter return filterFunc @Slot(QAction) def _addVariable(self, act): self._ui.filterEdit.textCursor().insertText(act.text()) @Slot(str) def on_showVarLabel_linkActivated(self, link): if not self._menu.isEmpty(): self._menu.exec(QCursor.pos())