Python 将信号从matplotlib图形重定向到PyQt4 QMAIN窗口
我有一个PyQt4 Gui,它生成了几个图形 一些图形有自己的鼠标点击事件,我使用mpl_conect与之交互 我的PyQt4主窗口有几个带有快捷方式的操作。我将使用Ctrl+S作为示例。当Python 将信号从matplotlib图形重定向到PyQt4 QMAIN窗口,python,matplotlib,pyqt4,Python,Matplotlib,Pyqt4,我有一个PyQt4 Gui,它生成了几个图形 一些图形有自己的鼠标点击事件,我使用mpl_conect与之交互 我的PyQt4主窗口有几个带有快捷方式的操作。我将使用Ctrl+S作为示例。当QMainWindow聚焦时,一切正常 我的问题是:当我专注于一个Matplobliblib图形而不是QMainWindow时,如何获得像Ctrl+S这样的信号来激发 答案很简单。我觉得很傻,因为我忽略了它 您需要将QAction的shortcutContext设置为应用程序快捷方式,而不是窗口快捷方式。另外
QMainWindow
聚焦时,一切正常
我的问题是:当我专注于一个Matplobliblib图形而不是
QMainWindow
时,如何获得像Ctrl+S这样的信号来激发 答案很简单。我觉得很傻,因为我忽略了它
您需要将QAction的shortcutContext设置为应用程序快捷方式,而不是窗口快捷方式。另外,请禁用mpl按键事件。您可以使用以下代码:
mpl_keypress_shortcuts = [key for key in matplotlib.rcParams.keys() if key.find('keymap') == 0]
#for key in mpl_keypress_shortcuts:
#print('%s = %s' % (key, matplotlib.rcParams[key]))
# Disable mpl shortcuts
for key in mpl_keypress_shortcuts:
matplotlib.rcParams[key] = ''
你能举个简单的例子吗?80%这是mpl中的一个bug,小部件只是吃掉了所有的关键信号,而没有将它们反弹到下一层。你是如何生成额外的数字的?您是在嵌入自己还是在使用
pyplot
?如果您使用的是pyplot
,那么在主循环冲突的情况下,可能会出现很多问题。@tcaswell我不认为这种行为是一个bug。如果主窗口信号没有聚焦,那么不让它们开火是有意义的。我只是想知道是否有一种方法可以明确地反弹信号。(也许我需要给他们一个父对象,这样就行了?)我正在使用pyplot.figure创建我的Fig。我想我理解错了。我以为你在主窗口有个身影。在嵌入时使用pyplot是个坏主意(tm)。如果您正在执行此操作,则图canvas.manager.window应提供对底层Qt窗口的引用。还看到我一直在断断续续地工作。我试图捕获按键事件并将其转换为QEvent.KeyPress,然后使用app.sendEvent(win,QEvent)发送它,但我似乎无法让它工作。使用fig.canvas.manager.window,我将如何获取底层qt对象并将按键信号从它重定向到我的主qt窗口?