Python PyQtGraph禁用鼠标滚轮,但保留鼠标的其他功能不变
我有一个pyqtgraph.ViewBox小部件,其中有一个图像。鼠标已启用,因此我可以在图像上选择一个矩形并将其缩放。但是有一个不需要的特性,缩放也发生在鼠标滚轮滚动上 我怎样才能只禁用鼠标滚轮,而保持其余的不变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
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()