def eventFilter(self, source, event): if(event.type() == QtCore.QEvent.MouseButtonPress and event.buttons() == QtCore.Qt.RightButton and source is self.ui.table.viewport()): item = self.ui.table.itemAt(event.position().toPoint()) if item is not None: menu = QMenu() menu.addAction('Copy password',lambda: self.copy(item.row())) menu.addAction('Add new',lambda: self.ui.stacked_wid.setCurrentIndex(3)) menu.exec(event.globalPosition().toPoint()) return super().eventFilter(source,event)
def open_menu(self): menu = QMenu(self) add_group = QAction('Add Group', self) add_trigger = QAction('Add Trigger', self) add_group.triggered.connect(self.add_group) add_trigger.triggered.connect(self.add_trigger) menu.addAction(add_group) menu.addAction(add_trigger) menu.addSeparator() add_edit = QAction('Edit', self) add_delete = QAction('Delete', self) add_edit.triggered.connect(self.open_item) add_delete.triggered.connect(self.delete_item) menu.addAction(add_edit) menu.addAction(add_delete) menu.exec(QCursor().pos())
class QudTreeView(QTreeView): """Custom tree view for the object hierarchy browser, including icons.""" def __init__(self, selection_handler, *args, **kwargs): """selection_handler: a function in the parent window to pass selected indices to""" self.selection_handler = selection_handler super().__init__(*args, **kwargs) size_policy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) size_policy.setHorizontalStretch(1) size_policy.setVerticalStretch(0) size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(size_policy) self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.setObjectName("treeView") self.setIndentation(10) self.setIconSize(QSize(16, 24)) self.setContextMenuPolicy(Qt.CustomContextMenu) self.tree_menu = QMenu() self.context_action_expand = QAction('Expand all', self.tree_menu) self.tree_menu.addAction(self.context_action_expand) self.context_action_scan = QAction('Scan wiki for selected objects', self.tree_menu) self.tree_menu.addAction(self.context_action_scan) self.context_action_upload_page = QAction( 'Upload templates for selected objects', self.tree_menu) self.tree_menu.addAction(self.context_action_upload_page) self.context_action_upload_tile = QAction( 'Upload tiles for selected objects', self.tree_menu) self.tree_menu.addAction(self.context_action_upload_tile) self.context_action_upload_extra = QAction( 'Upload extra image(s) for selected objects', self.tree_menu) self.tree_menu.addAction(self.context_action_upload_extra) self.context_action_diff = QAction('Diff template against wiki', self.tree_menu) self.tree_menu.addAction(self.context_action_diff) self.customContextMenuRequested.connect(self.on_context_menu) def on_context_menu(self, point): """Callback registered for right click in the tree view.""" self.tree_menu.exec(self.mapToGlobal(point)) def selectionChanged(self, selected, deselected): """Custom override to handle all forms of selection (keyboard, mouse)""" indices = self.selectedIndexes() self.selection_handler(indices) super().selectionChanged(selected, deselected)
def contextMenuEvent(self, event) -> None: context_menu = QMenu(self) file_is_synced = self.settings_model.is_id_in_sync_list(self.id) # se il file non รจ syncato mostra aggiungi, altrimenti mostra rimuovi if file_is_synced is False: add_sync_action = context_menu.addAction("Aggiungi a sync") else: remove_sync_action = context_menu.addAction("Rimuovi da sync") # selezione voci menu if file_is_synced is False: action = context_menu.exec(self.mapToGlobal(event.pos())) if action == add_sync_action: self.Sg_add_sync_file.emit(self.id) else: action = context_menu.exec(self.mapToGlobal(event.pos())) if action == remove_sync_action: self.Sg_remove_sync_file.emit(self.id)
class MainWindow(QWidget): def __init__(self, download_keyword, dirname, parent=None): super(MainWindow, self).__init__(parent, Qt.WindowStaysOnTopHint | Qt.CustomizeWindowHint) self.__dirname = dirname self.__download_widget = None self.__image_view = None self.__mouse_left_press_pos = None self.__menu = QMenu(self) self.init_common_ui() if download_keyword: self.init_download_ui(download_keyword) self.__download_widget.start_download() else: self.init_image_ui() self.__image_view.start_view() def init_common_ui(self): height = self.screen().size().height() // 5 self.resize(height * 5 // 3, height) self.setWindowTitle('cappuccino') vbox = QVBoxLayout(self) vbox.setContentsMargins(QMargins(0, 0, 0, 0)) self.setLayout(vbox) self.init_menu() def init_menu(self): def _inner_clear(): result = QMessageBox.question(self, self.windowTitle(), 'Delete all images ?', QMessageBox.Ok | QMessageBox.Cancel, QMessageBox.Cancel) if result == QMessageBox.Ok: shutil.rmtree(self.__dirname) _window = self def _inner_toggle(state): if state: _window.setWindowFlags(_window.windowFlags() | Qt.WindowStaysOnTopHint) else: _window.setWindowFlags(_window.windowFlags() & ~Qt.WindowStaysOnTopHint) _window.show() top = QAction('&Top', self, checkable=True) top.triggered.connect(_inner_toggle) top.setChecked(True) hide = QAction('&Hide', self) hide.triggered.connect(lambda: self.setWindowState(Qt.WindowMinimized)) clear = QAction('&Clear', self) clear.triggered.connect(_inner_clear) exit_ = QAction('&Exit', self) exit_.triggered.connect(lambda: self.close()) self.__menu.addAction(top) self.__menu.addAction(hide) self.__menu.addAction(clear) self.__menu.addAction(exit_) def init_download_ui(self, download_keyword): self.__download_widget = DownloadWidget(download_keyword, self.__dirname, self) layout = self.layout() layout.removeWidget(self.__image_view) layout.addWidget(self.__download_widget) self.__download_widget.mouse_left_press.connect( self.on_mouse_left_press) self.__download_widget.mouse_left_move.connect(self.on_mouse_left_move) self.__download_widget.mouse_left_release.connect( self.on_mouse_left_release) self.__download_widget.mouse_left_double_click.connect( self.on_mouse_left_double_click) self.__download_widget.complete_download.connect( self.on_complete_download) self.__download_widget.setContextMenuPolicy(Qt.CustomContextMenu) self.__download_widget.customContextMenuRequested.connect( self.on_context_menu_requested) def init_image_ui(self): self.__image_view = ImageView(self.__dirname, self) layout = self.layout() if self.__download_widget: layout.removeWidget(self.__download_widget) layout.addWidget(self.__image_view) self.__image_view.mouse_left_press.connect(self.on_mouse_left_press) self.__image_view.mouse_left_move.connect(self.on_mouse_left_move) self.__image_view.mouse_left_release.connect( self.on_mouse_left_release) self.__image_view.mouse_left_double_click.connect( self.on_mouse_left_double_click) self.__image_view.setContextMenuPolicy(Qt.CustomContextMenu) self.__image_view.customContextMenuRequested.connect( self.on_context_menu_requested) def on_complete_download(self): self.init_image_ui() self.__image_view.start_view() def on_mouse_left_press(self, gpos): self.__mouse_left_press_pos = self.mapFromGlobal( gpos) - self.mapFromGlobal(self.pos()) def on_mouse_left_move(self, gpos): if not self.__mouse_left_press_pos: return self.move(gpos - self.__mouse_left_press_pos) def on_mouse_left_release(self, gpos): self.__mouse_left_press_pos = None def on_mouse_left_double_click(self, event): self.setWindowState(Qt.WindowMinimized) def on_context_menu_requested(self, pos): self.__menu.exec(self.mapToGlobal(pos))