ZetCode

wxPython 简介

最后修改于 2023 年 1 月 10 日

本章是对 wxPython 工具包的介绍。

wxPython 是一个用于创建桌面 GUI 应用程序的跨平台工具包。 wxPython 的主要作者是 Robin Dunn。 使用 wxPython,开发人员可以在 Windows、Mac 和各种 Unix 系统上创建应用程序。 wxPython 是 wxWidgets 的一个封装,后者是一个成熟的跨平台 C++ 库。

Python

Python logo Python 是一种成功的脚本语言。 它最初由 Guido van Rossum 开发。 它于 1991 年首次发布。 Python 的灵感来自于 ABC 和 Haskell 编程语言。 Python 是一种高级的、通用的、多平台的、解释型语言。 有些人更喜欢称它为动态语言。 它很容易学习。 Python 是一种极简语言。 它的最显着的特征之一是它不使用分号和括号。 Python 使用缩进。 今天,Python 由世界各地的一大群志愿者维护。

对于创建图形用户界面,Python 程序员可以在三个不错的选项中选择:PyGTK、wxPython 和 PyQt。

wxPython 模块

wxPython 是一个用于创建桌面 GUI 应用程序的跨平台工具包。 wxPython 的主要作者是 Robin Dunn。 使用 wxPython,开发人员可以在 Windows、Mac 和各种 Unix 系统上创建应用程序。 wxPython 是 wxWidgets 的一个封装,后者是一个成熟的跨平台 C++ 库。 wxPython 由五个基本模块组成。

wxPython modules
图:wxPython 模块

Controls 模块提供了在图形应用程序中找到的常见小部件。 例如,按钮、工具栏或笔记本。 在 Windows 操作系统下,小部件被称为控件。 Core 模块由开发中使用的基本类组成。 这些类包括 Object 类,它是所有类的母类,Sizers,用于小部件布局,Events,基本几何类,如 Point 和 Rectangle。 图形设备接口 (GDI) 是一组用于在小部件上绘图的类。 此模块包含用于操作字体、颜色、画笔、笔或图像的类。 Misc 模块包含各种其他类和模块函数。 这些类用于日志记录、应用程序配置、系统设置、使用显示器或操纵杆。 Windows 模块由构成应用程序的各种窗口组成,例如 Panel、Dialog、Frame 或 Scrolled Window。

wxPython API

wxPython API 是一组方法和对象。 小部件是 GUI 应用程序的基本构建块。 在 Windows 下,小部件被称为控件。 我们可以大致将程序员分为两组:他们编写应用程序或库。 在我们的例子中,wxPython 是一个库,应用程序程序员使用它来编写应用程序。 从技术上讲,wxPython 是对名为 wxWidgets 的 C++ GUI API 的封装。 因此,它不是一个原生 API; 即,它不是直接用 Python 编写的。

在 wxPython 中,我们有很多小部件。 它们可以分为几个逻辑组。

基本小部件

这些小部件为派生小部件提供基本功能。 它们被称为祖先。 它们通常不直接使用。

Base widgets
图:基本小部件

顶级小部件

这些小部件彼此独立存在。

Top-level widgets
图:顶级小部件

容器

容器包含其他小部件。

Containters
图:容器

动态小部件

这些小部件可以被用户编辑。

Dynamic widgets
图:动态小部件

静态小部件

这些小部件显示信息。 它们不能被用户编辑。

Static widgets
图:静态小部件

其他小部件

这些小部件在应用程序中实现状态栏、工具栏和菜单栏。

Other widgets
图:其他小部件

继承

wxPython 中的小部件之间存在特定关系。 这种关系是通过继承来发展的。 继承是面向对象编程的关键部分。 小部件形成一个层次结构。 小部件可以从其他小部件继承功能。 现有类被称为基类、父类或祖先。 我们将继承的小部件称为派生小部件、子小部件或后代。

Inheritance diagram
图:继承图

假设我们在应用程序中使用按钮小部件。 按钮小部件从四个不同的基类继承。 最接近的类是 wx.Control 类。 按钮小部件是一种小窗口。 所有出现在屏幕上的小部件都是窗口。 因此,它们从 wx.Window 类继承。 有一些对象是不可见的。 例如,sizers、设备上下文或区域设置对象。 也有一些类是可见的,但它们不是窗口。 例如,颜色对象、插入符对象或光标对象。 并非所有小部件都是控件。 例如,wx.Dialog 不是一种控件。 控件是放置在其他小部件(称为容器)上的小部件。 这就是我们有一个单独的 wx.Control 基类的原因。

每个窗口都可以对事件做出反应。 按钮小部件也是如此。 通过单击按钮,我们启动了 wx.EVT_COMMAND_BUTTON_CLICKED 事件。 按钮小部件通过 wx.Window 类继承了 wx.EvtHandler。 每个对事件做出反应的小部件都必须从 wx.EvtHandler 类继承。 最后,所有对象都从 wx.Object 类继承。

这是对 wxPython 的介绍。