在PyQt中为2个对象创建一个键盘快捷键

时间:2010-09-16 07:49:58

标签: python pyqt

如何为2个对象创建“Ctrl + C”绑定:self.table,self.editor

我有:

shortcut = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), self.table, None, self.copyTable)
shortcut2 = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), self.editor, None, self.copyText)

这有效,但是被玷污了。如果我专注于self.editor并且我第一次按下“Ctrl + C它会执行self.copyTable,第二次是self.copyText。

我做错了什么? :P

我确实找到了一种解决方法,我在其中创建了一个QAction,用于检查哪个对象具有焦点并触发所需的操作。但我宁愿每个对象都有它。

编辑(一个工作示例):

shortcut = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), self, self.copytoclipbord)
shortcut.setContext(QtCore.Qt.WidgetShortcut)

2 个答案:

答案 0 :(得分:3)

您必须为快捷方式设置正确的上下文:默认情况下,它们是窗口 - “全局”,您可能希望它们是小部件 - “本地”。请参阅setShortcutContext

答案 1 :(得分:3)

我已经在这里做过,它工作得很好^ _ ^。非常简单的想法。

  

只需制作一个快捷方式和一个插槽。

QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), self, None, self.copyFunction)

并在copyFunction里面检查焦点,如下所示:

def copyFunction(self):
    if self.table.hasFocus:
        self.copyTable()
    elif self.editor.hasFocus:
        self.copyEditor()