在Python Matplotlib上的可滚动窗口中未触发mpl_connect key_press_event事件

tquggr8v  于 2022-12-04  发布在  Python
关注(0)|答案(1)|浏览(128)

我有多个绘图内滚动窗口QT5小部件如下。

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

        QtWidgets.QMainWindow.__init__(self)
        self.widget = QtWidgets.QWidget()
        self.setCentralWidget(self.widget)
        self.widget.setLayout(QtWidgets.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 = QtWidgets.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.show()
        exit(self.qapp.exec_())

我尝试使用mpl_connect捕获按键事件。

def key_selector(event):
    print('Key pressed.')

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

fig.canvas.mpl_connect('key_press_event', key_selector)
a = ScrollableWindow(fig)

但是mpl_connect 'key_press_event'没有触发。我尝试了另一个例子'button_press_event',并照常工作。如果对此有任何建议或指导,我们将不胜感激,谢谢。

a0zr77ik

a0zr77ik1#

看一下matplotlib的这个问题。基本上,你需要激活Qt的焦点到你的matplotlib画布上。

self.canvas.setFocusPolicy(QtCore.Qt.ClickFocus)
    self.canvas.setFocus()

相关问题