alp*_*ric 0 python qt pyqt shortcut
虽然从内限定自定义信号发射QTableView的keyPressEvent()方法:
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+Key或Shift+Key.第三,我无法弄清楚是什么Delete和Backspaces关键,所以我可以比较它们e.text().
所以真的很少有问题......
在Qt docs中,列出了所有keyboardKeys,以便它们可用于进行e.text()=='keyboardKey'比较.
如何Ctrl+Key使用我正在使用的"技术" 处理双键盘键组合(例如)(从视图内部发送自定义信号keyPressEvent()?
是否有另一种更简单的方法来挂钩键盘键来触发方法或功能(因此用户可以使用键盘快捷键,而鼠标位于上方QTableView以启动"操作")?
如果您查看签名,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语句按顺序执行.