wxPython编程基础全解析
发布时间: 2025-08-17 02:03:56 阅读量: 1 订阅数: 5 

### wxPython 编程基础全解析
#### 1. wxPython 概述
wxPython 是一个将 Python 编程语言与 wxWidgets 工具包相结合的强大工具,可在 [www.wxpython.org](www.wxpython.org) 进行下载。它把广泛的界面工具包和易于使用的脚本语言融合在一起,为各类程序员,包括已熟悉 Python 或 wxWidgets 的开发者,带来了生产力的提升和实用的功能。
wxPython 程序在事件关联机制上与 C++ 程序有所不同。由于 Python 允许函数作为对象轻松传递,wxPython 程序可以使用相对直接的 `wx.Bind()` 方法在运行时动态关联事件与要执行的代码。而 C++ 程序则必须使用 `DECLARE_EVENT_TABLE` 和 `BEGIN_EVENT_TABLE` 宏,这些宏在编译时静态绑定,使用起来稍显繁琐。不过,除了这些差异,两个程序逐行对比起来还是颇为相似的,而且 Python 版本的代码更具可读性。在大型程序中,Python 凭借其更简单的语法、自动内存管理等优势,优势会更加明显。
#### 2. wxPython 程序基础
- **最小程序**:可以用不到 10 行代码创建一个最小的 wxPython 程序。但大多数 wxPython 程序会比这长得多,通常会被划分为多个独立的模块,每个模块包含 wxPython 类的自定义子类,并且最好包含大量的文档字符串。
- **访问工具包**:大部分 wxPython 工具包可通过 `wx` 包访问,使用 `import wx` 语句即可。每个 wxPython 程序都必须有一个应用程序对象,即 `wx.App` 子类的实例,该子类需定义一个 `OnInit()` 方法。大多数 wxPython 程序会有一个或多个框架,即 `wx.Frame` 子类的实例。框架是屏幕上出现的大型、可移动、可调整大小的类似窗口的容器,通常带有菜单、状态栏、工具栏和其他小部件。当调用应用程序的 `MainLoop()` 方法时,程序控制权将传递给 wxPython。
- **工具包特性**:wxPython 包含了所有你期望的基本小部件,还有常见的对话框、各种更复杂的小部件、HTML 渲染、电子表格样式的网格等。它基于的 wxWidgets 工具包是一个具有众多特性的 C++ 框架,是跨平台的工具包,主要支持 Microsoft Windows、Unix GTK+ 和 Mac OS。wxWidgets 应用程序的基本单元是窗口,即任何可以绘制到屏幕上的项目。
#### 3. 创建和使用应用程序对象
每个 wxPython 应用程序都需要一个应用程序对象,它必须是 `wx.App` 类或其自定义子类的实例。应用程序对象的主要目的是在后台管理主事件循环,该事件循环响应窗口系统事件并将其分派到相应的事件处理程序。在创建 wxPython 图形对象之前,必须先实例化应用程序对象。
##### 3.1 创建 wx.App 子类
创建 `wx.App` 子类通常是个好主意,即使一开始不需要自定义功能,这样在后续需要时也能方便使用。创建和使用 `wx.App` 子类需要执行以下四个步骤:
1. **定义子类**:在代码中定义 `wx.App` 的子类。
2. **编写 OnInit() 方法**:在子类定义中编写 `OnInit()` 方法。该方法在应用程序启动且主事件循环开始之前由 wxPython 系统调用,它不接受参数并返回一个布尔值。如果返回值为 `False`,应用程序将立即退出。在大多数情况下,建议将该方法的返回值硬编码为 `True`。
3. **创建类的实例**:在程序的主部分创建该类的实例。
4. **调用 MainLoop() 方法**:调用应用程序实例的 `MainLoop()` 方法,该方法将程序控制权传递给 wxPython。
以下是一个示例代码:
```python
import wx
class App(wx.App):
def OnInit(self):
frame = wx.Frame(None, -1, 'Startup')
frame.Show()
self.SetTopWindow(frame)
return True
if __name__ == '__main__':
app = App()
app.MainLoop()
```
##### 3.2 何时省略 wx.App 子类
并非必须创建自己的 `wx.App` 子类。通常创建子类是为了能在 `OnInit()` 方法中创建顶级框架,但也可以在调用脚本的其他部分创建框架,最常见的替代位置是 `__main__` 子句。不过,必须先创建 `wx.App` 实例。只有当系统中只有一个框架且应用程序设置很简单,不需要其他全局参数时,才建议使用 `wx.PySimpleApp`。
`wx.PySimpleApp` 类的定义如下:
```python
class PySimpleApp(wx.App):
def __init__(self, redirect=False, filename=None,
useBestVisual=False, clearSigInt=True):
wx.App.__init__(self, redirect, filename, useBestVisual,
clearSigInt)
def OnInit(self):
return True
```
使用示例:
```python
if __name__
```
0
0
相关推荐







