PyQt连接到KeyPressEvent

时间:2014-12-15 00:53:47

标签: python pyqt4

某些小部件允许我这样做:

self.widget.clicked.connect(on_click)

但正在做:

self.widget.keyPressEvent.connect(on_key)

将无法说该对象没有属性' connect'。

我知道对小部件进行子类化并重新实现keyPressEvent方法将允许我响应该事件。但是,如何从用户上下文{@ 1}到键盘事件或其他说法呢?

2 个答案:

答案 0 :(得分:9)

创建自定义信号,并从重新实现的事件处理程序中发出:

class MyWidget(QtGui.QWidget):
    keyPressed = QtCore.pyqtSignal(int)

    def keyPressEvent(self, event):
        super(MyWidget, self).keyPressEvent(event)
        self.keyPressed.emit(event.key())
...

def on_key(key):
    # test for a specific key
    if key == QtCore.Qt.Key_Return:
        print('return key pressed')
    else:
        print('key pressed: %i' % key)

self.widget.keyPressed.connect(on_key)

(注意:为了保持现有的事件处理,需要调用基类实现。)

答案 1 :(得分:4)

我过去这样做的方式是(这是一种解决方法),这是发送方和接收方声明/连接信号。

def keyPressEvent(self, event):
    if type(event) == QtGui.QKeyEvent:
        if event.key() == QtCore.Qt.Key_Space:
            self.emit(QtCore.SIGNAL('MYSIGNAL'))