def mouseMoveEvent(self, qevent: QtGui.QMouseEvent) -> None: self.lastPoint = qevent.pos() if self.active_drag: self.active_drag.move(QPoint_to_point(qevent.pos())) elif self.active_drag is None and not self.mouse_wheel_emu: if self.interactionDelegate is not None: pos = QPoint_to_point(qevent.pos()) # TODO - revisit behaviour? potential_actions = [] for (event_id, modifiers), act in self.id_actions_map.items(): if event_id.mouse_triggered(): potential_actions.append(act) event = MoveEvent( pos, self.viewState.tfV2W(pos), potential_actions) self.interactionDelegate.mouseMoveEvent(event) self.update()
def mousePressEvent(self, event): """Reimplement Qt method""" # mouse buttons for forward and backward navigation if event.button() == Qt.XButton1: self.sig_prev_cursor.emit() elif event.button() == Qt.XButton2: self.sig_next_cursor.emit() if sys.platform.startswith('linux') and event.button() == Qt.MidButton: self.calltip_widget.hide() self.setFocus() event = QMouseEvent(QEvent.MouseButtonPress, event.pos(), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) QPlainTextEdit.mousePressEvent(self, event) QPlainTextEdit.mouseReleaseEvent(self, event) # Send selection text to clipboard to be able to use # the paste method and avoid the strange spyder-ide/spyder#1445. # NOTE: This issue seems a focusing problem but it # seems really hard to track mode_clip = QClipboard.Clipboard mode_sel = QClipboard.Selection text_clip = QApplication.clipboard().text(mode=mode_clip) text_sel = QApplication.clipboard().text(mode=mode_sel) QApplication.clipboard().setText(text_sel, mode=mode_clip) self.paste() QApplication.clipboard().setText(text_clip, mode=mode_clip) else: self.calltip_widget.hide() QPlainTextEdit.mousePressEvent(self, event)
def mousePressEvent(self, event): if event.button() == Qt.RightButton: # Rewrite the mouse event to a left button event so the cursor is # moved to the location of the pointer. event = QMouseEvent(QEvent.MouseButtonPress, event.pos(), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) HintedTextEdit.mousePressEvent(self, event)
def mouseMoveEvent(self, event: QMouseEvent) -> None: """Drag to move the joint.""" if not self.pressed: return row = self.get_joint_number() if not row > -1: return mx = (event.x() - self.ox) / self.zoom my = (event.y() - self.oy) / -self.zoom hv = _ConfigureCanvas.edit_size / 2 if -hv <= mx <= hv: self.pos[row] = (mx, self.pos[row][1]) else: if -hv <= mx: x = hv else: x = -hv self.pos[row] = (x, self.pos[row][1]) if -hv <= my <= hv: self.pos[row] = (self.pos[row][0], my) else: if -hv <= my: y = hv else: y = -hv self.pos[row] = (self.pos[row][0], y) self.update()
def mousePressEvent(self, event: QMouseEvent) -> None: x, y, z = [event.pos().x(), event.pos().y(), 0] origin = self.viewer.origin_from_click(x, y, z) ray = self.viewer.ray_from_click(x, y, z) self.viewer.signal_screen_clicked.emit([x, y, z]) self.viewer.signal_ray_generated.emit({'origin': origin, 'ray': ray})
def mouseMoveEvent(self, e: QMouseEvent): if e.buttons() & (Qt.RightButton | Qt.LeftButton): print("mouseMoveEvent in Item...") self.__m_lastMouseMove = self.__cloneMouseEvent(e) self.__m_lastMouseMove.ignore() e.accept() self.update()
def mouseMoveEvent(self, ev: QMouseEvent): ''' Starts floating the complete docking area including all dock widgets, if it is not the last dock area in a floating widget Parameters ---------- ev : QMouseEvent ''' super().mouseMoveEvent(ev) if ev.buttons() != Qt.LeftButton: return if self.d.floating_widget: self.d.floating_widget.move_floating() return # If this is the last dock area in a dock container it does not make # sense to move it to a new floating widget and leave this one empty container = self.d.dock_area.dock_container() if container.is_floating() and container.visible_dock_area_count( ) == 1: return drag_distance = (self.d.drag_start_mouse_pos - ev.pos()).manhattanLength() if drag_distance >= start_drag_distance(): logger.debug('DockAreaTabBar.startFloating') self.start_floating(self.d.drag_start_mouse_pos) overlay = self.d.dock_area.dock_manager().container_overlay() overlay.set_allowed_areas(DockWidgetArea.outer_dock_areas)
def resetModelSelection(self): self.__m_lastMouseLeftButton = QMouseEvent(QEvent.Type.None_, QPointF(-1, -1), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) self.__m_lastMouseLeftButton.ignore() self.update()
def _get_ratio(self, e: QMouseEvent, margin=10): frame_margin = 10 width = self.width() - 2 * frame_margin if e.x() < margin or e.x() > self.width() - margin: return if e.y() < margin or e.y() > self.height() - margin: return return (e.x() - frame_margin) / width
def mousePressEvent(self, ev: QMouseEvent): if ev.button() == Qt.LeftButton: self.d.drag_state = DragState.floating_widget self.d.floating_widget.start_dragging( ev.pos(), self.d.floating_widget.size(), self) return super().mousePressEvent(ev)
def mousePressEvent(self, event: QMouseEvent) -> None: super().mousePressEvent(event) x, y, z = [event.pos().x(), event.pos().y(), 1] origin = self.viewer.origin_from_click(x, y, z) ray = self.viewer.ray_from_click(x, y, z) self.viewer.intersect_elements(origin, ray)
def selectModel(self, x, y): self.__m_lastMouseLeftButton = QMouseEvent(QEvent.Type.None_, QPointF(x, y), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) self.__m_lastMouseLeftButton.ignore() self.update()
def detect_rays(self, event: QMouseEvent) -> None: x, y, z = [event.pos().x(), event.pos().y(), 1.0] self.rays.append(self.viewer.ray_from_click(x, y, z)) self.origins.append(self.viewer.origin_from_click(x, y, z)) if len(self.rays) == 2: self.viewer.generate_slice_description(self.origins, self.rays) self.origins.clear() self.rays.clear()
def mousePressEvent(self, event: QtGui.QMouseEvent) -> None: self.lastPoint = event.pos() event_id = EventID.from_mouse_event(event) modifiers = Modifier.from_qevent(event) self.dispatchActionEvent(event.pos(), event_id, modifiers) self.update()
def mouseMoveEvent(self, event: QMouseEvent) -> None: super().mouseMoveEvent(event) # Update end of line start = self.viewer.flatline.vertices[0] ndc = self.viewer.screen_to_ndc(event.x(), event.y(), 1.0) self.viewer.flatline.vertices = [start, ndc] self.viewer.makeCurrent() self.viewer.flatline.reload()
def mousePressEvent(self, event: QMouseEvent): """ mousePressEvent Parameters ---------- event : QMouseEvent """ super().mousePressEvent(event) if event.button() == Qt.LeftButton: self._click_pos = self.mapToScene(event.pos())
def mousePressEvent(self, event: QMouseEvent) -> None: """Check if get close to a joint.""" mx = (event.x() - self.ox) / self.zoom my = (event.y() - self.oy) / -self.zoom for node, (x, y) in self.pos.items(): if node in self.same: continue if hypot(x - mx, y - my) <= 5: self.set_joint_number.emit(node) self.pressed = True break
def mouseMoveEvent(self, event: QMouseEvent): if event.x() > self.width() - 20: QApplication.setOverrideCursor(Qt.SplitHCursor) else: QApplication.setOverrideCursor(Qt.ArrowCursor) if self.last_point is None or not (event.buttons() & Qt.LeftButton): return new_width = event.x() + 10 new_width = max(new_width, 150) new_width = min(new_width, 600) self.setMinimumWidth(new_width)
def mousePressEvent(self, e: QtGui.QMouseEvent): opt = QtWidgets.QStyleOptionSpinBox() self.initStyleOption(opt) if self.style().subControlRect(QtWidgets.QStyle.CC_SpinBox, opt, QtWidgets.QStyle.SC_SpinBoxUp).contains( e.pos()): self.setValue(self.value() + 1) self.valueChanged.emit() elif self.style().subControlRect(QtWidgets.QStyle.CC_SpinBox, opt, QtWidgets.QStyle.SC_SpinBoxDown).contains( e.pos()): self.setValue(self.value() - 1) self.valueChanged.emit()
def __cloneMouseEvent(self, e: QMouseEvent): event_type = e.type() local_pos = e.localPos() button = e.button() buttons = e.buttons() modifiers = e.modifiers() clone = QMouseEvent(event_type, local_pos, button, buttons, modifiers) clone.ignore() return clone
def mousePressEvent(self, ev: QMouseEvent): ''' Stores mouse position to detect dragging Parameters ---------- ev : QMouseEvent ''' if ev.button() == Qt.LeftButton: ev.accept() self.d.drag_start_mouse_pos = ev.pos() return super().mousePressEvent(ev)
def mouseReleaseEvent(self, ev: QMouseEvent): ''' Stores mouse position to detect dragging Parameters ---------- ev : QMouseEvent ''' if ev.button() != Qt.LeftButton: return super().mouseReleaseEvent(ev) logger.debug('DockAreaTabBar.mouseReleaseEvent') ev.accept() self.d.floating_widget = None self.d.drag_start_mouse_pos = QPoint()
def mouseMoveEvent(self, ev: QMouseEvent): ''' Mousemoveevent Parameters ---------- ev : QMouseEvent ''' if (not (ev.buttons() & Qt.LeftButton) or self.d.is_dragging_state(DragState.inactive)): self.d.drag_state = DragState.inactive return super().mouseMoveEvent(ev) # move floating window if self.d.is_dragging_state(DragState.floating_widget): self.d.floating_widget.move_floating() return super().mouseMoveEvent(ev) # move tab if self.d.is_dragging_state(DragState.tab): # Moving the tab is always allowed because it does not mean moving # the dock widget around self.d.move_tab(ev) # Maybe a fixed drag distance is better here ? drag_distance_y = abs(self.d.drag_start_mouse_position.y() - ev.pos().y()) start_dist = start_drag_distance() if drag_distance_y >= start_dist: # If this is the last dock area in a dock container with only # one single dock widget it does not make sense to move it to a new # floating widget and leave this one empty if (self.d.dock_area.dock_container().is_floating() and self.d.dock_area.open_dock_widgets_count() == 1 and self.d.dock_area.dock_container( ).visible_dock_area_count() == 1): return # Floating is only allowed for widgets that are movable if self.d.floatable: self.d.start_floating() elif (self.d.dock_area.open_dock_widgets_count() > 1 and (ev.pos() - self.d.drag_start_mouse_position).manhattanLength() >= start_dist): # Wait a few pixels before start moving self.d.drag_state = DragState.tab else: return super().mouseMoveEvent(ev)
def mousePressEvent(self, ev: QMouseEvent): ''' Mousepressevent Parameters ---------- ev : QMouseEvent ''' if ev.button() == Qt.LeftButton: ev.accept() self.d.drag_start_mouse_position = ev.pos() self.d.drag_state = DragState.mouse_pressed self.clicked.emit() return super().mousePressEvent(ev)
def mouseMoveEvent(self, event: QMouseEvent): """ mouseMoveEvent Parameters ---------- event : QMouseEvent """ super().mouseMoveEvent(event) if self._scene.mouseGrabberItem() is None and event.buttons( ) == Qt.LeftButton: # Make sure shift is not being pressed if not (event.modifiers() & Qt.ShiftModifier): difference = self._click_pos - self.mapToScene(event.pos()) self.setSceneRect(self.sceneRect().translated( difference.x(), difference.y()))
def test_open_context_menu(qtbot, monkeypatch, caplog): """ Test to ensure the context menu can be displayed when the open_context_menu() method is called. Expectations: Instead of displaying the context menu, monkeypatch exec()_ to just log the execution, and check to ensure the log event is there. Parameters ---------- qtbot : fixture Window for widget testing monkeypatch : fixture To override dialog behaviors caplog : fixture The fixture to capture log outputs """ pydm_label = PyDMLabel() qtbot.addWidget(pydm_label) caplog.set_level(logging.INFO) def mock_exec_(*args): logger.info("Context Menu displayed.") monkeypatch.setattr(QMenu, "exec_", mock_exec_) mouse_event = QMouseEvent(QMouseEvent.MouseButtonRelease, pydm_label.rect().center(), Qt.RightButton, Qt.RightButton, Qt.ShiftModifier) pydm_label.open_context_menu(mouse_event) assert "Context Menu displayed." in caplog.text
def test_editor_rstrip_keypress( editorbot, input_text, expected_text, keys, strip_all): """ Test that whitespace is removed when leaving a line. """ qtbot, widget = editorbot widget.strip_trailing_spaces_on_modify = strip_all widget.set_text(input_text) cursor = widget.textCursor() cursor.movePosition(QTextCursor.End) widget.setTextCursor(cursor) for key in keys: if isinstance(key, tuple): # Mouse event button, position = key cursor = widget.textCursor() cursor.setPosition(position) xypos = widget.cursorRect(cursor).center() widget.mousePressEvent(QMouseEvent( QEvent.MouseButtonPress, xypos, button, button, Qt.NoModifier)) else: qtbot.keyPress(widget, key) assert widget.toPlainText() == expected_text
def mouseReleaseEvent(self, event: QtGui.QMouseEvent) -> None: event_id = EventID.from_mouse_event(event) modifiers = Modifier.from_qevent(event) self.dispatchActionEvent(event.pos(), event_id, modifiers) self.update()
def move_tab(self, ev: QMouseEvent): ''' Moves the tab depending on the position in the given mouse event Parameters ---------- ev : QMouseEvent ''' ev.accept() # left, top, right, bottom = self.public.getContentsMargins() move_to_pos = self.public.mapToParent( ev.pos()) - self.drag_start_mouse_position move_to_pos.setY(0) self.public.move(move_to_pos) self.public.raise_()
def mouseMoveEvent(self, e: QMouseEvent): if self.chosen is None: return index = self.color_layout.indexOf(self.chosen) index2 = int(e.x() / self.width() * self.color_layout.count() + 0.5) if index2 != index: self.color_layout.insertWidget(index2, self.chosen)
def mousePressEvent(self, event): """Reimplement Qt method""" if sys.platform.startswith('linux') and event.button() == Qt.MidButton: self.calltip_widget.hide() self.setFocus() event = QMouseEvent(QEvent.MouseButtonPress, event.pos(), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) QPlainTextEdit.mousePressEvent(self, event) QPlainTextEdit.mouseReleaseEvent(self, event) # Send selection text to clipboard to be able to use # the paste method and avoid the strange Issue 1445 # NOTE: This issue seems a focusing problem but it # seems really hard to track mode_clip = QClipboard.Clipboard mode_sel = QClipboard.Selection text_clip = QApplication.clipboard().text(mode=mode_clip) text_sel = QApplication.clipboard().text(mode=mode_sel) QApplication.clipboard().setText(text_sel, mode=mode_clip) self.paste() QApplication.clipboard().setText(text_clip, mode=mode_clip) else: self.calltip_widget.hide() QPlainTextEdit.mousePressEvent(self, event)