def _onMouseMoveX(self, menu: QtWidgets.QMenu, event: QtGui.QMouseEvent, button: QtWidgets.QToolButton): hover = self.childAt(self.mapFromGlobal(QtGui.QCursor.pos())) if isinstance(hover, QtWidgets.QToolButton) and hover != button: menu.close() hover.showMenu() else: return QtWidgets.QMenu.mouseMoveEvent(menu, event)
def _onMouseMove(menu: QtWidgets.QMenu, event: QtGui.QMouseEvent): button = menu.property("__button") toolbar = button.parentWidget() hover = toolbar.childAt(toolbar.mapFromGlobal(QtGui.QCursor.pos())) if isinstance(hover, QtWidgets.QToolButton) and hover != button: menu.close() hover.showMenu() else: return QtWidgets.QMenu.mouseMoveEvent(menu, event)
class TextInput(): def __init__(self, suggestion='', input_valid_callback = None): self.input_valid_callback = input_valid_callback self.menu = QMenu() self.lb = QWidgetAction(None) self.widget = QWidget(None) self.layout = QHBoxLayout() self.button = QPushButton() self.button.setText("Ok") self.le = QLineEdit() self.layout.addWidget(self.le) self.layout.addWidget(self.button) self.widget.setLayout(self.layout) self.button.pressed.connect(self.done) self.le.textEdited.connect(self.check_input) self.eventFilter = EnterKeyPressFilter() self.eventFilter.callback = self.done self.le.installEventFilter(self.eventFilter) self.lb.setDefaultWidget(self.widget) self.menu.addAction(self.lb) self.le.setText(suggestion) self.le.setFocus() self.le.selectAll() self.result = None def show(self, pos): self.menu.exec_(pos) return self.result def done(self): self.result = self.le.text() self.menu.close() def check_input(self): if self.input_valid_callback is not None: result = self.input_valid_callback(self.le.text()) if result: self.le.setStyleSheet('') else: self.le.setStyleSheet('background: pink') return None
def contextMenuEvent(self, event): contextMenu = QMenu(self) deleteFile = contextMenu.addAction("Delete File") action = contextMenu.exec_(self.mapToGlobal(event.pos())) if action == deleteFile: alert = QMessageBox() alert.setWindowTitle("Action Dialog") alert.setText("Are you sure you want to delete this file?") alert.setStandardButtons(QMessageBox.No | QMessageBox.Yes) alert.setDefaultButton(QMessageBox.No) response = alert.exec_() if response == QMessageBox.No: contextMenu.close() else: file_name = self.model.filePath( self.index_).split("storage/")[1] os.remove(self.model.filePath(self.index_)) os.remove( self.model.filePath(self.index_).split("/storage")[0] + "/meta/" + file_name + "_metadata.json") contextMenu.close()