Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQtGraph禁用鼠标滚轮,但保留鼠标的其他功能不变_Python_Pyqt5_Mouseevent_Pyqtgraph_Viewbox - Fatal编程技术网

Python PyQtGraph禁用鼠标滚轮,但保留鼠标的其他功能不变

Python PyQtGraph禁用鼠标滚轮,但保留鼠标的其他功能不变,python,pyqt5,mouseevent,pyqtgraph,viewbox,Python,Pyqt5,Mouseevent,Pyqtgraph,Viewbox,我有一个pyqtgraph.ViewBox小部件,其中有一个图像。鼠标已启用,因此我可以在图像上选择一个矩形并将其缩放。但是有一个不需要的特性,缩放也发生在鼠标滚轮滚动上 我怎样才能只禁用鼠标滚轮,而保持其余的不变 from PyQt5.QtWidgets import QApplication, QMainWindow import pyqtgraph as pg import cv2 class MainWindow(QMainWindow): def __init__(self

我有一个pyqtgraph.ViewBox小部件,其中有一个图像。鼠标已启用,因此我可以在图像上选择一个矩形并将其缩放。但是有一个不需要的特性,缩放也发生在鼠标滚轮滚动上

我怎样才能只禁用鼠标滚轮,而保持其余的不变

from PyQt5.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
import cv2


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        pg.setConfigOption('imageAxisOrder', 'row-major')
        pg.setConfigOption('leftButtonPan', False)  # if False, then dragging the left mouse button draws a rectangle
    
        self.grid = pg.GraphicsLayoutWidget()
        self.top_left = self.grid.addViewBox(row=1, col=1)

        image = cv2.imread('/path/to/your/image.jpg', cv2.IMREAD_UNCHANGED)
        self.image_item = pg.ImageItem()
        self.image_item.setImage(image)
        self.top_left.addItem(self.image_item)

        self.setCentralWidget(self.grid)


def main():
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()


if __name__ == '__main__':
    main()

您可以在ViewBox上安装事件过滤器,并捕获鼠标滚轮事件,在本例中为QEvent.GraphicsCeneWheel


这比公认的答案要简单得多。在ViewBox上使用setMouseEnabled:

from PyQt5.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
import cv2


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        pg.setConfigOption('imageAxisOrder', 'row-major')
        pg.setConfigOption('leftButtonPan', False)  # if False, then dragging the left mouse button draws a rectangle

        self.grid = pg.GraphicsLayoutWidget()
        self.top_left = self.grid.addViewBox(row=1, col=1)
        self.top_left.setMouseEnabled(x=False, y=False)  # <--- Add this line

        image = cv2.imread('/path/to/your/image.jpg', cv2.IMREAD_UNCHANGED)
        self.image_item = pg.ImageItem()
        self.image_item.setImage(image)
        self.top_left.addItem(self.image_item)

        self.setCentralWidget(self.grid)


def main():
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()


if __name__ == '__main__':
    main()

我尝试了你的建议,但没有成功,所以接受的答案对我来说仍然是更好的解决方案。我正在使用pyqtgraph-0.11.0。当你说它不起作用时,那是什么意思?我不确定我是否误解了这个问题。不工作意味着没有忽略鼠标滚轮的缩放。问题是忽略轮子,而只忽略轮子,而被接受的解决方案就是这样。
from PyQt5.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
import cv2


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        pg.setConfigOption('imageAxisOrder', 'row-major')
        pg.setConfigOption('leftButtonPan', False)  # if False, then dragging the left mouse button draws a rectangle

        self.grid = pg.GraphicsLayoutWidget()
        self.top_left = self.grid.addViewBox(row=1, col=1)
        self.top_left.setMouseEnabled(x=False, y=False)  # <--- Add this line

        image = cv2.imread('/path/to/your/image.jpg', cv2.IMREAD_UNCHANGED)
        self.image_item = pg.ImageItem()
        self.image_item.setImage(image)
        self.top_left.addItem(self.image_item)

        self.setCentralWidget(self.grid)


def main():
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()


if __name__ == '__main__':
    main()