为PyQt中的两个对象创建一个快捷键
我该如何为两个对象设置“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 个回答
3
我已经在这里做过了,效果很好哦 ^_^。这个想法非常简单。
只需要做一个快捷方式和一个插槽。
QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), self, None, self.copyFunction)
然后在复制功能里面检查一下焦点,像这样:
def copyFunction(self):
if self.table.hasFocus:
self.copyTable()
elif self.editor.hasFocus:
self.copyEditor()
3
你需要为快捷键设置正确的上下文:默认情况下,它们是全局的,也就是说在整个窗口中都有效。你可能希望它们只在特定的控件中有效,也就是局部的。可以查看setShortcutContext来了解更多信息。