利用相关工具让wxPython更易处理
立即解锁
发布时间: 2025-08-17 02:03:57 阅读量: 1 订阅数: 5 

### 利用相关工具让wxPython更易处理
#### 1. Py包中的内容概述
Py包中的PyCrust程序利用了如`shell.py`、`crust.py`、`introspect.py`和`interpreter.py`等Python模块。这些模块是构建PyCrust的基础,可单独或组合使用。PyCrust、PyShell和PyAla - Mode是不同的组装方式,底层代码大部分相同,只是最外层容器有差异。可以将Py包看作一个模块库,能在程序中按需组装以显示wxPython shell、代码编辑器或运行时自省信息。
Py包中的模块可分为提供用户界面功能和不提供用户界面功能两类,这种分离便于在自己的程序中使用这些模块。以`Py`开头的模块是面向最终用户的GUI程序,一般不建议在自己的程序中导入。
#### 2. 面向最终用户的GUI程序
| 程序 | 描述 |
| --- | --- |
| PyAlaCarte | 简单的源代码编辑器,一次编辑一个文件。 |
| PyAlaMode | 多文件源代码编辑器,每个文件显示在单独的笔记本标签中,第一个标签包含一个PyCrust分割窗口。 |
| PyCrust | wxPython shell与显示各种运行时信息(包括命名空间树查看器)的笔记本标签的组合。 |
| PyFilling | 简单的命名空间树查看器,单独使用价值不大,仅作为使用底层库的示例。 |
| PyShell | 简单的wxPython shell界面,没有PyCrust中的额外笔记本。功能上,PyShell和PyCrust中的wxPython shell相同。 |
| PyWrap | 命令行实用工具,可将现有的wxPython程序与PyCrust框架一起运行,允许在PyCrust shell中操作应用程序。 |
#### 3. 支持模块
支持模块为最终用户程序提供基本功能,也可导入到自己的程序中,是创建用户级Py程序的构建块。以下是部分支持模块及其描述:
| 模块 | 描述 |
| --- | --- |
| buffer | 支持文件编辑 |
| crust | 包含PyCrust应用程序特有的GUI元素 |
| dispatcher | 提供全局信号调度服务 |
| document | 包含一个简单的Document类,是文件的轻量级包装,可跟踪文件属性并提供读写方法,Buffer类将读写操作委托给Document实例 |
| editor | 包含PyAlaCarte和PyAlaMode程序中的所有GUI编辑组件 |
| editwindow | 包含一个EditWindow类,继承自`wx.stc.StyledTextCtrl`,为Py包中STC的三种主要用途(Python shell、源代码编辑器和只读源代码显示)提供通用功能 |
| filling | 包含允许用户导航对象命名空间并显示对象运行时信息的所有GUI控件 |
| frame | 定义一个Frame类,是Py包中所有其他框架的基类,有状态栏、图标和菜单,菜单项会根据当前状态和上下文自动更新 |
| images | 包含各种Py程序使用的饼图图标 |
| interpreter | 定义一个Interpreter类,负责提供自动完成列表、调用提示信息和触发自动完成功能的键码 |
| introspect | 为调用提示和命令自动完成提供各种自省类型的支持函数 |
| pseudo | 定义文件类,允许Interpreter类重定向stdin、stdout和stderr |
| shell | 包含定义PyCrust、PyShell和PyAlaMode中Python shell界面的GUI元素 |
| version | 包含一个表示Py整体当前版本的字符串变量`VERSION` |
#### 4. 部分复杂模块详细介绍
- **buffer模块**:包含一个Buffer类,支持文件的常规编辑,有`new()`、`open()`、`hasChanged()`、`save()`和`saveAs()`等方法。文件由document模块中的Document类实例表示,实际编辑通过editor模块中的Editor类实例进行,Buffer类充当编辑器和物理文件之间的中间人。每个Buffer实例都有自己的Python解释器实例,便于在编辑Python源代码文件时提供自动完成、调用提示等运行时帮助。以下是更新命名空间的方法:
```python
def updateNamespace(self):
"""Update the namespace for autocompletion and calltips.
Return True if updated, False if there was an error."""
if not self.interp or not hasattr(self.editor, 'getText'):
return False
syspath = sys.path
sys.path = self.syspath
text = self.editor.getText()
text = text.replace('\r\n', '\n')
text = text.replace('\r', '\n')
name = self.modulename or self.name
module = imp.new_module(name)
newspace = module.__dict__.copy()
try:
try:
code = compile(text, name, 'exec')
except:
raise
try:
exec code in newspace
except:
raise
else:
# No problems, so update the namespace.
self.interp.locals.clear()
self.interp.locals.update(newspace)
return True
finally:
sys.path = syspath
for m in sys.modules.keys():
if m not in self.modules:
del sys.modules[m]
```
- **crust模块**:包含PyCrust应用程序特有的六个GUI元素,最通用的类是`CrustFrame`,是`wx.Frame`的子类。可以通过导入`CrustFrame`并创建实例,将PyCrust框架嵌入到自己的程序中。也可以使用其他类来实现更小的功能。
| 类 | 描述 |
| --- | --- |
| Crust | 基于`wx.SplitterWindow`,包含一个shell和显示运行时信息的笔记本标签 |
| Display | 用于使用Pretty Print显示对象的样式文本控件 |
| Calltip | 包含最新shell调用提示的文本控件 |
| SessionListing | 包含会话所有命令的文本控件 |
| DispatcherListing | 包含会话所有调度信息的文本控件 |
| CrustFrame | 包含Crust分割窗口的框架 |
- **dispatcher模块**:提供全局信号调度服务,充当中间人,允许对象在彼此不知情的情况下发送和接收消息。对象只需知道要发送的信号(通常是简单字符串),一个或多个对象可以请求调度器在信号发送时通知它
0
0
复制全文
相关推荐










