上一节: wxPython - 主要类
上一节
下一节: wxPython - 布局管理
下一节
wxPython - 事件处理
简述
与以顺序方式执行的控制台模式应用程序不同,基于 GUI 的应用程序是事件驱动的。函数或方法响应用户的操作(如单击按钮、从集合中选择项目或鼠标单击等)执行,称为事件。
与在应用程序运行时发生的事件有关的数据存储为派生自的子类的对象wx.Event. 显示控件(例如 Button)是特定类型的事件源,并生成与其关联的 Event 类的对象。例如,单击按钮会发出 wx.CommandEvent。该事件数据被分派给程序中的事件处理方法。wxPython 有许多预定义的事件绑定器。一个Event binder封装特定小部件(控件)、其关联的事件类型和事件处理程序方法之间的关系。
例如,调用OnClick() method在按钮的单击事件上的程序中,需要以下语句 -
self.b1.Bind(EVT_BUTTON, OnClick)
Bind() method由 wx.EvtHandler 类的所有显示对象继承。这里的 EVT_.BUTTON 是绑定器,它将按钮单击事件与 OnClick() 方法相关联。
例子
在以下示例中,由拖动顶层窗口(在本例中为 wx.Frame 对象)引起的 MoveEvent 连接到OnMove() method使用 wx.EVT_MOVE 活页夹。代码显示一个窗口。如果使用鼠标移动它,它的瞬时坐标会显示在控制台上。
import wx
class Example(wx.Frame):
def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
self.Bind(wx.EVT_MOVE, self.OnMove)
self.SetSize((250, 180))
self.SetTitle('Move event')
self.Centre()
self.Show(True)
def OnMove(self, e):
x, y = e.GetPosition()
print "current window position x = ",x," y= ",y
ex = wx.App()
Example(None)
ex.MainLoop()
上面的代码产生以下输出 -
当前窗口位置 x = 562 y = 309
当前窗口位置 x = 562 y = 309
当前窗口位置 x = 326 y = 304
当前窗口位置 x = 384 y = 240
当前窗口位置 x = 173 y = 408
当前窗口位置 x = 226 y = 30
当前窗口位置 x = 481 y = 80
下表列出了一些从 wx.Event 继承的子类 -
下面给出的是 wx.Event 最常用的事件
序列号
事件和描述
1
wxKeyEvent
按下或释放键时发生
2
wxPaintEvent
每当需要重绘窗口内容时生成
3
wxMouseEvent
包含有关由于鼠标活动(例如按下或拖动鼠标按钮)引起的任何事件的数据
4
wxScrollEvent
与 wxScrollbar 和 wxSlider 等可滚动控件相关联
5
wxCommandEvent
包含源自许多小部件(如按钮、对话框、剪贴板等)的事件数据。
6
wxMenuEvent
不同的菜单相关事件,不包括菜单命令按钮单击
7
wxColourPickerEvent
wxColourPickerCtrl 生成的事件
8
wxDirFilePickerEvent
FileDialog 和 DirDialog 生成的事件
wxPython 中的事件有两种类型。基本事件和命令事件。基本事件保持在它起源的窗口的本地。大多数 wxWidgets 生成命令事件。一种command event可以传播到类层次结构中源窗口之上的一个或多个窗口。
例子
以下是事件传播的一个简单示例。完整的代码是 -
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
super(MyPanel, self).__init__(parent)
b = wx.Button(self, label = 'Btn', pos = (100,100))
b.Bind(wx.EVT_BUTTON, self.btnclk)
self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)
def OnButtonClicked(self, e):
print 'Panel received click event. propagated to Frame class'
e.Skip()
def btnclk(self,e):
print "Button received click event. propagated to Panel class"
e.Skip()
class Example(wx.Frame):
def __init__(self,parent):
super(Example, self).__init__(parent)
self.InitUI()
def InitUI(self):
mpnl = MyPanel(self)
self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)
self.SetTitle('Event propagation demo')
self.Centre()
self.Show(True)
def OnButtonClicked(self, e):
print 'click event received by frame class'
e.Skip()
ex = wx.App()
Example(None)
ex.MainLoop()
在上面的代码中,有两个类。MyPanel, wx.Panel 子类和 Example, wx.Frame 子类,它是程序的顶级窗口。一个按钮被放置在面板中。
此 Button 对象绑定到事件处理程序 btnclk() ,该事件处理程序将其传播到父类(在本例中为 MyPanel)。按钮单击生成一个CommandEvent可以通过 Skip() 方法传播到其父级。
MyPanel 类对象还将接收到的事件绑定到另一个处理程序 OnButtonClicked()。该函数依次传递给它的父类,即 Example 类。上面的代码产生以下输出 -
Button received click event. Propagated to Panel class.
Panel received click event. Propagated to Frame class.
Click event received by frame class.
返回 wxPython 主要类
上一节: wxPython - 主要类
上一节
下一节: wxPython - 布局管理
下一节
查看笔记 分享笔记
笔记内容:
称呼:
Email:
站点:
分享笔记 重置
分类导航
前端
Ajax 教程
Angular 教程
Aurelia 教程
Bootstrap 教程
ChartJS 教程
CSS 教程
ES6 教程
FontAwesome 教程
HTML 教程
HTML 字符集 教程
HTML 游戏 教程
JavaScript 教程
jQuery 教程
Less 教程
React 教程
Sass 教程
Stylus 教程
TypeScript 教程
Unity 教程
Vue.js 教程
WebAssembly 教程
XAML 教程
颜色 教程
服务端
C# 教程
C++ 教程
COBOL 教程
C语言 教程
Fortran 教程
Go 教程
Groovy 教程
Java 教程
JSP 教程
JVM 教程
Kotlin 教程
Lisp 教程
Lua 教程
Node.js 教程
Pascal 教程
Perl 教程
PHP 教程
Python 教程
Python 3 教程
Ruby 教程
Rust 教程
Scala 教程
Spring 教程
Spring Boot 教程
Spring Cloud 教程
VB.Net 教程
移动端
Android 教程
IOS 教程
Objective-C 教程
React Native 教程
Swift 教程
小程序 教程
数据库
Access 教程
DB2 教程
Mariadb 教程
Memcached 教程
MongoDB 教程
MySQL 教程
Neo4j 教程
PL/SQL 教程
PostgreSQL 教程
Redis 教程
SQL 教程
SQL Server 教程
SQLite 教程
T-SQL 教程
数据格式
Jackson 教程
JSON 教程
SVG 教程
XML 教程
开发工具
ActiveMQ 教程
Ant 教程
Apache HttpClient 教程
Apache POI PPT 教程
AWS 教程
Docker 教程
ElasticSearch 教程
ExpressJS 教程
GIT 教程
GitLab 教程
Google Maps 教程
Gradle 教程
Java NIO 教程
JavaFX 教程
JavaMail 教程
JDBC 教程
jMeter 教程
JPA 教程
jsoup 教程
Junit 教程
KoaJS 教程
Kubernetes 教程
Log4j 教程
Logstash 教程
Lucene 教程
Makefile 教程
Maven 教程
RESTful 教程
Sed 教程
SEO 教程
Servlet 教程
SLF4J 教程
Socket.IO 教程
Struts 教程
SVN 教程
TestNG 教程
UML 教程
UNIX / LINUX 教程
WebSocket 教程
WPF 教程
xStream 教程
区块链 教程
数据处理
Flink 教程
Flume 教程
Hadoop 教程
Hbase 教程
Hive 教程
Kafka 教程
Kibana 教程
MapReduce 教程
MATLAB 教程
MyBatis 教程
Pig 教程
R语言 教程
Solr 教程
Spark 教程
Storm 教程
Zookeeper 教程
大数据分析 教程
数据仓库 教程
数据挖掘 教程
计算机基础
HTTP 教程
IPv4 教程
IPv6 教程
Ubantu 教程
WebServices 教程
嵌入式系统 教程
操作系统 教程
数据结构和算法 教程
汇编语言 教程
物联网 教程
电子电路基础 教程
编译器设计 教程
网站开发 教程
计算机 教程
计算机基础 教程
计算机网络 教程
设计模式 教程
AI
CNTK 教程
Keras 教程
PyTorch 教程
TensorFlow 教程
人工智能 教程
机器学习 教程
Python 技术
Django 教程
Flask 教程
NumPy 教程
Pandas 教程
Pillow 教程
PyGTK 教程
PyQt5 教程
PySpark 教程
pytest 教程
Python -数据科学 教程
Python MySQL 教程
Python 取证 教程
Python 数据结构 教程
Python 文本处理 教程
Python 网络编程 教程
Python 网页抓取 教程
Python 设计模式 教程
RxPY 教程
SciPy 教程
Seaborn 教程
SymPy 教程
wxPython 教程
框架
Laravel 教程
Web 图标Icon 教程
Web2py 教程
WebGL 教程
WebRTC 教程
WordPress 教程
Yii 教程
Zend Framework 教程
SAP
Crystal Reports 教程