某些小部件允许我这样做:
self.widget.clicked.connect(on_click)
但正在做:
self.widget.keyPressEvent.connect(on_key)
将无法说该对象没有属性' connect'。
我知道对小部件进行子类化并重新实现keyPressEvent
方法将允许我响应该事件。但是,如何从用户上下文{@ 1}到键盘事件或其他说法呢?
答案 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'))