如何在PyQtGraph ImageView中更改鼠标滚轮行为?

奥利·N

我正在使用ImageView显示3D体积的2D切片(MRI扫描数据),并希望更改鼠标绑定以使用户更直观。默认情况下,鼠标滚轮更改图像比例/缩放。取而代之的是,我希望滚轮切换到下一个/上一个切片-沿着构成3D体积的一系列2D图像向前或向后移动。该文档使用z轴作为时间-因此它将在时间上向前/向后移动。

我看不到任何容易重新实现的pyqtgraph鼠标事件方法,也看不到如何在PySide2中执行此操作。在这个虚函数grabMouseEvent()中似乎有暗示,但我不知道如何重新实现以捕获方向盘。

这是创建窗口和50帧100x100像素噪声数据的最小工作代码:

from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QMainWindow
from PySide2.QtWidgets import QWidget
from PySide2.QtWidgets import QHBoxLayout

import pyqtgraph as pg
import numpy as np
import sys


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.cw = QWidget(self)
        self.cw.setAutoFillBackground(True)
        self.setCentralWidget(self.cw)

        self.layout = QHBoxLayout()
        self.cw.setLayout(self.layout)

        self.DcmImgWidget = MyImageWidget(parent=self)
        self.layout.addWidget(self.DcmImgWidget)

        self.show()


class MyImageWidget(pg.ImageView):
    def __init__(self, parent):
        super().__init__()

        self._parent = parent
        self.ui.histogram.hide()
        self.ui.roiBtn.hide()
        self.ui.menuBtn.hide()

        # 50 frames of 100x100 random noise
        img = np.random.normal(size=(50, 100, 100))
        self.setImage(img)


def main():
    app = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

使用图像下方的滚动条可以很好地滚动。

如何在PyQtGraph对象中重新实现鼠标滚轮事件?

永乐

一种可能的解决方案是通过事件过滤器截获GraphicsView的wheel事件并阻止事件被发送,然后使用事件信息发出指示是转到下一页还是上一页的信号。

import sys

from PySide2.QtCore import QObject, QEvent, Signal
from PySide2.QtWidgets import (
    QApplication,
    QHBoxLayout,
    QMainWindow,
    QWidget,
)

import pyqtgraph as pg
import numpy as np


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.DcmImgWidget = MyImageWidget()

        self.cw = QWidget()
        self.cw.setAutoFillBackground(True)
        self.setCentralWidget(self.cw)

        layout = QHBoxLayout(self.cw)
        layout.addWidget(self.DcmImgWidget)


class Helper(QObject):
    changed = Signal(bool)

    def __init__(self, widget):
        super().__init__(widget)
        self._widget = widget
        self.widget.installEventFilter(self)

    @property
    def widget(self):
        return self._widget

    def eventFilter(self, obj, event):
        if obj is self.widget and event.type() == QEvent.Wheel:
            self.changed.emit(event.angleDelta().y() > 0)
            return True

        return super().eventFilter(obj, event)


class MyImageWidget(pg.ImageView):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui.histogram.hide()
        self.ui.roiBtn.hide()
        self.ui.menuBtn.hide()

        # 50 frames of 100x100 random noise
        img = np.random.normal(size=(50, 100, 100))
        self.setImage(img)

        gv = self.ui.graphicsView
        helper = Helper(gv.viewport())
        helper.changed.connect(self.change_page)

    def change_page(self, state):
        self.jumpFrames(1 if state else -1)


def main():
    app = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在pyqtgraph中关闭窗口

来自分类Dev

如何在PYQTGRAPH中清除ScatterPlotItem

来自分类Dev

如何在 PyQtGraph 中绘制音频波形

来自分类Dev

如何在TcxComboBox中抑制鼠标滚轮

来自分类Dev

如何在Chrome中启用鼠标滚轮?

来自分类Dev

如何在TcxComboBox中抑制鼠标滚轮

来自分类Dev

如何在Sublime Text 3中更改鼠标滚轮滚动速度?

来自分类Dev

如何在PyQtGraph中实现复选框组

来自分类Dev

如何使用鼠标滚轮更改Firebug检查器中的属性值?

来自分类Dev

如何在Xfce 4.12中使用鼠标滚轮或快捷方式更改窗口不透明度?

来自分类Dev

如何在Ubuntu 11.04或10.10中禁用鼠标滚轮滚动?

来自分类Dev

如何在Atom Editor中禁用鼠标滚轮缩放?

来自分类Dev

如何在窗口事件/鼠标滚轮中添加参数

来自分类Dev

如何在Ubuntu 11.04或10.10中禁用鼠标滚轮滚动?

来自分类Dev

如何在SWT中删除鼠标滚轮监听器

来自分类Dev

如何在 Windows Vista 中禁用鼠标滚轮

来自分类Dev

如何使鼠标滚轮在Windows和Mac OS上的行为相同?

来自分类Dev

如何在3D pyqtgraph实现中设置GLMeshItem的绝对位置

来自分类Dev

如何在嵌入pyqt5的pyqtgraph中显示光标坐标?

来自分类Dev

如何更改每个应用程序的鼠标滚轮滚动速度

来自分类Dev

如何更改 PYQTgraph 中 GlBarGraphItem 的默认颜色

来自分类Dev

如何在鼠标滚轮上触发事件?

来自分类Dev

如何在LibGDX中使用鼠标滚轮?

来自分类Dev

如何使鼠标滚轮滚动到mediafire.com中的部分

来自分类Dev

如何对Xlib中的鼠标滚轮作出反应?

来自分类Dev

如何使用鼠标滚轮在scrollviewer中滚动列表框

来自分类Dev

如何在Win 8 Hyper-V中运行的Ubuntu 12.10中启用鼠标滚轮滚动?

来自分类Dev

如何在没有鼠标滚轮的情况下缩放netbeans中的文本?

来自分类Dev

如何在Here Maps JavaScript API v3中禁用鼠标滚轮缩放?

Related 相关文章

  1. 1

    如何在pyqtgraph中关闭窗口

  2. 2

    如何在PYQTGRAPH中清除ScatterPlotItem

  3. 3

    如何在 PyQtGraph 中绘制音频波形

  4. 4

    如何在TcxComboBox中抑制鼠标滚轮

  5. 5

    如何在Chrome中启用鼠标滚轮?

  6. 6

    如何在TcxComboBox中抑制鼠标滚轮

  7. 7

    如何在Sublime Text 3中更改鼠标滚轮滚动速度?

  8. 8

    如何在PyQtGraph中实现复选框组

  9. 9

    如何使用鼠标滚轮更改Firebug检查器中的属性值?

  10. 10

    如何在Xfce 4.12中使用鼠标滚轮或快捷方式更改窗口不透明度?

  11. 11

    如何在Ubuntu 11.04或10.10中禁用鼠标滚轮滚动?

  12. 12

    如何在Atom Editor中禁用鼠标滚轮缩放?

  13. 13

    如何在窗口事件/鼠标滚轮中添加参数

  14. 14

    如何在Ubuntu 11.04或10.10中禁用鼠标滚轮滚动?

  15. 15

    如何在SWT中删除鼠标滚轮监听器

  16. 16

    如何在 Windows Vista 中禁用鼠标滚轮

  17. 17

    如何使鼠标滚轮在Windows和Mac OS上的行为相同?

  18. 18

    如何在3D pyqtgraph实现中设置GLMeshItem的绝对位置

  19. 19

    如何在嵌入pyqt5的pyqtgraph中显示光标坐标?

  20. 20

    如何更改每个应用程序的鼠标滚轮滚动速度

  21. 21

    如何更改 PYQTgraph 中 GlBarGraphItem 的默认颜色

  22. 22

    如何在鼠标滚轮上触发事件?

  23. 23

    如何在LibGDX中使用鼠标滚轮?

  24. 24

    如何使鼠标滚轮滚动到mediafire.com中的部分

  25. 25

    如何对Xlib中的鼠标滚轮作出反应?

  26. 26

    如何使用鼠标滚轮在scrollviewer中滚动列表框

  27. 27

    如何在Win 8 Hyper-V中运行的Ubuntu 12.10中启用鼠标滚轮滚动?

  28. 28

    如何在没有鼠标滚轮的情况下缩放netbeans中的文本?

  29. 29

    如何在Here Maps JavaScript API v3中禁用鼠标滚轮缩放?

热门标签

归档