为PyQt中的两个对象创建一个快捷键

0 投票
2 回答
3659 浏览
提问于 2025-04-16 04:13

我该如何为两个对象设置“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来了解更多信息。

撰写回答