keyReleaseEvent忽略PySide / Qt中的所有其他密钥版本

时间:2012-07-20 12:09:17

标签: python qt qt4 pyside

我在Qt 4.7中使用PySide,并在QMainWindow中遇到keyReleaseEvent问题。这是代码:

def keyReleaseEvent(self, event):
    if event.key() == QtCore.Qt.Key_Alt:
        print 'Alt Key Released'
        if self.pointerTypeGroup.checkedId() != self.scene.HandDrag:
            print "Disabling Drag"
            self.pointerGroupClicked(self.pointerTypeGroup.checkedId())
            #event.accept()
    #super(MainWindow, self).keyPressEvent(event)

这仅适用于所有其他密钥版本。第一个被忽略,第二个工作,第三个失败,第四个工作,依此类推。无论我是否实现了keyPressEvent,我是否放入了event.accept()或者之后是否调用了基本实现。那些对行为没有影响。

我正在使用它在QGraphicsView中制作一个可拖动的地图。如果我实现了keyPressEvent并拖动地图,只要我在每次按键操作之间操作地图,就永远不会调用keyReleaseEvent。

任何想法发生了什么?

1 个答案:

答案 0 :(得分:0)

对我来说,Alt键是一个修饰键,它由event.modifiers()方法识别。检查一下:

def keyPressEvent(self, event):
    if event.key() == QtCore.Qt.Key_O and ( event.modifiers() & QtCore.Qt.ALT ):
        print 'yeah' # Or your actual action code

供参考,请查看QtCore.Qt namespace reference。希望这有帮助!

我受this blog post

指导