使用Python和Qt创建GUI应用(三):事件处理

用户和Qt程序的交互会产生事件,事件的类型有多种,每种都代表不同的类型,例如鼠标、键盘事件。

生成的事件传入到widget的事件处理函数中。例如,点击一个widget会产生QMouseEvent,然后把事件传入到widget的.mousePressEvent事件处理函数中。这个事件处理函数可以查询事件信息,例如,什么触发了这个事件。

你可以通过重写类的事件处理函数来拦截事件:

这样处理事件的方式是很枯燥的,想象一下,你要捕获20个不同button的事件:

实际上Qt提供了更整洁的处理事件的方法,SignalsSlots(信号和槽)。

Signals

signals允许你“监听”程序中发生特定事件的通知。它在某些方面和事件有点类似,例如,点击一个button;它也有更多用法,例如,更新控件中的文本。数据也可以通signal一起发送。

Signals的接收器叫Slots,Qt提供了一些标准的slots,也可以用Python函数做为slots。

Signals示例

首先我们来看一看QMainWindow的Signals,Qt 文档,找到Signals一段:

Screen Shot 2016-01-30 at 18.13.17

你可以看到QMainWindow本身有两个Signals,从QWidget中继承4个Signals,从Object中继承两个。点击QWidget,它的signals定义如下:

Screen Shot 2016-01-30 at 18.25.12

示例:

执行结果:

Screen Shot 2016-01-30 at 18.44.56

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注