PyQt4 全局快捷键?

8 投票
3 回答
6671 浏览
提问于 2025-04-16 00:45

我有一个应用程序,它可以打开多个子窗口,像这样:窗口1打开窗口2,窗口2再打开窗口3(这是个简化的例子)。

在主窗口中,我设置了CTRL+Q作为退出的快捷键。下面是主类的一个简化示例。

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.actionExit = QtGui.QAction(_('E&xit'),self)
        self.actionExit.setShortcut('Ctrl+Q')
        self.actionExit.setStatusTip(_('Close application'))
        self.connect(self.actionExit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))

现在,如果我打开第三个子窗口,然后按CTRL+Q,什么都不会发生。有没有办法让这些子窗口也能使用这个退出的快捷键,或者让这个快捷键变成全局的?还是说我必须在每个子窗口中都单独设置一次?

3 个回答

1

你也可以直接为你的 QAction 设置一个快捷键:

self.actionExit.setShortcut(QtGui.QKeySequence("Ctrl+Q"))

这个例子和你的代码唯一的不同就是,Ctrl+Q 首先被转换成了 QtGui.QKeySequence 这种格式。

3

试着设置一下 快捷键上下文

self.actionExit.setShortcutContext(QtCore.Qt.ApplicationShortcut)
12

在我的__init__函数里,我用了这个:

QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Q"), self, self.close)

这个功能运行得很顺利!

撰写回答