如何使用keyPressEvent()处理键盘快捷键?它应该用于它吗?

alp*_*ric 0 python qt pyqt shortcut

虽然从内限定自定义信号发射QTableViewkeyPressEvent()方法:

def keyPressEvent(self, e):
    if e.text()=='w':
        self.emit(SIGNAL('writeRequested'))
    if e.text()=='o':
        self.emit(SIGNAL('openRequested')) 
Run Code Online (Sandbox Code Playgroud)

我正在使用传入的e参数来确定按下了什么键盘键.有了这种"技术",我当时只限于一个角色.其次,我不能够使用的组合Ctrl+Key,Alt+KeyShift+Key.第三,我无法弄清楚是什么DeleteBackspaces关键,所以我可以比较它们e.text().

所以真的很少有问题......

  1. 在Qt docs中,列出了所有keyboardKeys,以便它们可用于进行e.text()=='keyboardKey'比较.

  2. 如何Ctrl+Key使用我正在使用的"技术" 处理双键盘键组合(例如)(从视图内部发送自定义信号keyPressEvent()

  3. 是否有另一种更简单的方法来挂钩键盘键来触发方法或功能(因此用户可以使用键盘快捷键,而鼠标位于上方QTableView以启动"操作")?

thr*_*les 5

如果您查看签名,keyPressEvent()您将看到e您在问题中描述的参数类型QKeyEvent.

QKeyEvent实例有一个方法key(),它返回一个可以与枚举中的常量匹配的整数Qt.Key.

例如:

if e.key() == Qt.Key_Backspace:
    print 'The backspace key was pressed'
Run Code Online (Sandbox Code Playgroud)

同样,QKeyEvent有一个方法modifiers().因为可以同时按下多个键盘修改器,所以您需要稍微使用它.结果来自枚举中modifiers()的一个或多个常量的二进制OR Qt.KeyboardModifier.要测试是否按下了给定的修改器,您需要执行二进制AND.例如:

if e.modifiers() & Qt.ShiftModifier:
    print 'The Shift key is pressed'

if e.modifiers() & Qt.ControlModifier:
    print 'The control key is pressed'

if e.modifiers() & Qt.ShiftModifier and e.modifiers() & Qt.ControlModifier:
    print 'Ctrl+Shift was pressed'
Run Code Online (Sandbox Code Playgroud)

注意:在上面的示例中,如果同时按下了ctrl + shift,则所有三个if语句按顺序执行.