gpt4 book ai didi

python - Matplotlib 'key_press_event' 没有响应

转载 作者:行者123 更新时间:2023-12-04 23:19:30 25 4
gpt4 key购买 nike

通过在图上单击鼠标按钮:self.canvas.Fig.canvas.mpl_connect('button_press_event', self.button_press)
我可以通过在状态栏中打印“按钮按下”来接收信号并生成答案 self.statusBar().showMessage("Key pressed", 400)
但由于某种原因,同一段代码不适用于按键(键盘)按下:self.canvas.Fig.canvas.mpl_connect('key_press_event', self.key_press)
没有出现“按键按下”消息,这意味着没有发生事件或没有接收到信号。

这是我的所有基本类(class)的 MWE:

import sys
import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy

from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas


class MyMplCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100,data=[[]],timedelay=[],wavelength=[]):
self.Fig = Figure(figsize=(width, height), dpi=dpi)
self.Dataplot = self.Fig.add_subplot(111)

self.compute_initial_figure(data,timedelay, wavelength)

FigureCanvas.__init__(self, self.Fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self,QSizePolicy.Expanding,QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)

def compute_initial_figure(self,data,timedelay,wavelength):
pass

class MyStaticMplCanvas(MyMplCanvas):
def __init__(self, *args, **kwargs):
MyMplCanvas.__init__(self, *args, **kwargs)

def compute_initial_figure(self,data,timedelay,wavelength):
self.Dataplot.set_xlabel('Wavelength, nm')
self.Dataplot.set_ylabel('Time delay, ~s')

class GraphView(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.main_widget = QtWidgets.QWidget(self)

self.canvas = MyStaticMplCanvas(self.main_widget, width=8, height=8, dpi=100,data=[[]],timedelay=[],wavelength=[])

self.canvas.Fig.canvas.mpl_connect('key_press_event', self.key_press)
self.canvas.Fig.canvas.mpl_connect('button_press_event', self.button_press)

self.layoutMain = QtWidgets.QHBoxLayout(self.main_widget)
self.layoutFigure = QtWidgets.QHBoxLayout()
self.layoutMain.addLayout(self.layoutFigure)
self.layoutFigure.addWidget(self.canvas)


self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)

def key_press(self,event):
self.statusBar().showMessage("Key pressed", 400)

def button_press(self,event):
self.statusBar().showMessage("Button pressed", 400)

def main():
app = QApplication( sys.argv )
a=GraphView()
a.show()
app.exec()

if __name__ == '__main__':
sys.exit(main())

我的代码有什么问题?

最佳答案

我找到了解决方案 here


self.canvas = MyStaticMplCanvas(self.main_widget, width=8, height=8, dpi=100,data=[[]],timedelay=[],wavelength=[])

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

单击 Canvas 使其具有焦点,然后您将看到 key_presses

关于python - Matplotlib 'key_press_event' 没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31656345/

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