jpc*_*cgt 8 python events signals-slots pyqt4
某些小部件允许我这样做:
self.widget.clicked.connect(on_click)
Run Code Online (Sandbox Code Playgroud)
但做:
self.widget.keyPressEvent.connect(on_key)
Run Code Online (Sandbox Code Playgroud)
将失败说该对象没有属性'connect'.
我知道对窗口小部件进行子类化并重新实现该keyPressEvent方法将允许我响应该事件.但是,如何.connect()从用户上下文中获取键盘事件或以其他方式说出来?
ekh*_*oro 10
创建自定义信号,并从重新实现的事件处理程序中发出它:
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)
Run Code Online (Sandbox Code Playgroud)
(注意:为了保持事件的现有处理,需要调用基类实现).
我过去这样做的方式是(这是一种解决方法),这是在发送方中,接收方声明/连接到信号。
def keyPressEvent(self, event):
if type(event) == QtGui.QKeyEvent:
if event.key() == QtCore.Qt.Key_Space:
self.emit(QtCore.SIGNAL('MYSIGNAL'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17338 次 |
| 最近记录: |