上一节: 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 教程