【问题标题】:PyQtGraph: prevent QScrollArea scrolling when panning plotPyQtGraph:在平移绘图时防止 QScrollArea 滚动
【发布时间】:2020-01-07 14:57:35
【问题描述】:

在 PyQtGraph 中,您可以使用滚轮放大绘图。但是,当在 QScrollArea 中嵌入 PyQtGraph 时,滚动会放大悬停的图并滚动 QScrollArea。

最少的可重现代码:

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

app = QApplication([])
window = QMainWindow()
scroll = QScrollArea(window)
window.setCentralWidget(scroll)

frame = pg.GraphicsLayoutWidget()
plot = frame.addPlot().plot([1,2,3], [2,5,10])

scroll.setWidget(frame)
scroll.setWidgetResizable(True)

frame.setFixedHeight(600)
window.setFixedHeight(500)
window.show()
app.exec_()

我尝试在谷歌上搜索该问题,并找到了一种停止平移并允许滚动的方法,但我希望反过来:阻止滚动并允许平移。

PyQtGraph 中是否可以在鼠标悬停时停止 QScrollArea 滚动?

【问题讨论】:

  • 哦,是的,对不起。我一完成就将其添加到问题中。编辑:晚餐准备好了,这需要一段时间,对不起:/

标签: pyqt pyqt5 pyqtgraph qscrollarea


【解决方案1】:

解决办法是取消QScrollArea的wheelEvent:

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


class ScrollArea(QScrollArea):
    def wheelEvent(self, event):
        pass


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    window = QMainWindow()
    scroll = ScrollArea(window)
    window.setCentralWidget(scroll)

    frame = pg.GraphicsLayoutWidget()
    plot = frame.addPlot().plot([1, 2, 3], [2, 5, 10])

    scroll.setWidget(frame)
    scroll.setWidgetResizable(True)

    frame.setFixedHeight(600)
    window.setFixedHeight(500)
    window.show()
    sys.exit(app.exec_())

【讨论】:

  • 我意识到我没有在原始问题中明确说明这一点,但是当有一个情节悬停时是否可以停止滚动only?当鼠标悬停在空白区域时,Qt 仍然可以滚动
  • @kangalioo 发布一个新问题,指出这一点并提供适当的 MRE 来帮助您。 :-)
  • 我猜你是对的 :p 虽然在之后立即问几乎相同的问题感觉有点不对,只是稍微改变一下。所以我会一直等到我觉得绝对必要为止
  • @kangalioo 这就是 SO 的工作原理,您的问题是在所有情况下都避免滚动,而我的回答是。如果您添加另一个要求,那么即使它与第一个要求相似并且值得一个新帖子,它也是另一个不同的问题。
  • 试过你提供的确切代码,对我不起作用,滚轮仍在放大/缩小..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2021-03-07
  • 2023-03-18
相关资源
最近更新 更多