gpt4 book ai didi

python - pyqt4的scrollArea事件和matplotlib的wheelEvent

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:19 29 4
gpt4 key购买 nike

关于这个问题及答案here ,当鼠标位于绘图上时,有没有办法将滚轮滚动事件传递给滚动条?我尝试在主窗口小部件中使用事件过滤器,但它没有注册轮子在主窗口中滚动,仅在 Canvas /图中滚动。我不需要绘图来知道它正在滚动,只需要 GUI。任何帮助将不胜感激,谢谢。

最佳答案

在 PyQt 中滚动 QScrollArea 内的 FigureCanvas 的一种解决方案是使用 matplotlib 的 "scroll_event" (参见 Event handling tutorial )并连接它是一个滚动 QScrollArea 的滚动条的函数。

该示例(来 self 对 this question 的回答)可以扩展为通过滚动连接到函数

self.canvas.mpl_connect("scroll_event", self.scrolling)

在此函数内,滚动条值会更新。

import matplotlib.pyplot as plt
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar

class ScrollableWindow(QtGui.QMainWindow):
def __init__(self, fig):
self.qapp = QtGui.QApplication([])

QtGui.QMainWindow.__init__(self)
self.widget = QtGui.QWidget()
self.setCentralWidget(self.widget)
self.widget.setLayout(QtGui.QVBoxLayout())
self.widget.layout().setContentsMargins(0,0,0,0)
self.widget.layout().setSpacing(0)

self.fig = fig
self.canvas = FigureCanvas(self.fig)
self.canvas.draw()
self.scroll = QtGui.QScrollArea(self.widget)
self.scroll.setWidget(self.canvas)

self.nav = NavigationToolbar(self.canvas, self.widget)
self.widget.layout().addWidget(self.nav)
self.widget.layout().addWidget(self.scroll)

self.canvas.mpl_connect("scroll_event", self.scrolling)

self.show()
exit(self.qapp.exec_())

def scrolling(self, event):
val = self.scroll.verticalScrollBar().value()
if event.button =="down":
self.scroll.verticalScrollBar().setValue(val+100)
else:
self.scroll.verticalScrollBar().setValue(val-100)


# create a figure and some subplots
fig, axes = plt.subplots(ncols=4, nrows=5, figsize=(16,16))
for ax in axes.flatten():
ax.plot([2,3,5,1])

# pass the figure to the custom window
a = ScrollableWindow(fig)

关于python - pyqt4的scrollArea事件和matplotlib的wheelEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43334255/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com