# 使用PAGE设计范例
应用程序开发过程的PAGE视图是使用PAGE一次构建一个GUI窗口的程序,以自动构建在GUI模块中实现的GUI窗口,并将所有与应用程序相关的支持代码放入支持模块。 我希望在抛光外观和添加小部件时经常更改GUI,但理想情况下只会自动生成一次支持模块。 困难的编码工作应仅限于正确使用应用程序,而不是实现Tkinter的约定。 换句话说,重新设计GUI外观应仅对应用程序代码产生最小的影响。
我相信在单独的子目录中构建GUI和支持模块是个好主意,因此建议的过程是创建应用程序子目录并创建您的工作目录。
PAGE生成一个用于应用程序的顶级窗口。 为此,PAGE会生成两个Python模块,即GUI模块和支持模块,同时将设计保留在项目文件中。
面向对象编程的正统视图将对象的所有属性和方法分组为一个类。 我通常遵循该格言。 PAGE与该规则的不同之处在于,PAGE将自动生成的代码放置在GUI模块中,并将手工编码的事件功能委托给单独的支持模块。 PAGE对支持模块所做的全部工作是可选地创建该模块的骨架版本,其中包含两个模块之间的链接以及框架回调函数。 PAGE还可以将支持模块更新为扩展框架的范围,以增加返工所需的新回调函数。
这两个模块的分离是由于需要一种可靠的方法来重做GUI。 我发现我由于诸如改善外观,澄清其行为,添加新的小部件以支持新功能等原因而不断更改GUI。 我称之为返工。 在研究并编写了支持模块的代码后,我不想将该代码公开给某些“智能”自动化程序,甚至是我自己的程序,但我仍然想使用PAGE来更新GUI。 实现返工要求PAGE能够区分自动生成的代码(可以重写的代码)和手写的代码(必须保留的代码)。 我想到的唯一安全的方法是将代码分成两个模块。 **PAGE的最重要要求是保留手动代码**,因为用户绕过完善GUI设计以及扩展和测试应用程序的循环。
在构建多个顶级窗口应用程序时,我建议使用PAGE来构建“根”顶级窗口,然后使用相应的生成的Python模块作为应用程序的主要模块。 当需要其他顶级窗口时,请使用PAGE进行指定,并将该代码用作应用程序的其他模块,可以根据需要将其导入。 (生成的GUI模块将包含自动生成的功能,以帮助在模块内创建和销毁它们。)
GUI模块包含实际使GUI出现在屏幕上的代码。 通过与GUI交互,用户会导致发生事件,例如选择按钮或向条目添加文本,这些事件实际上会调用回调函数,这些回调函数实现为在支持模块中找到的函数。
PAGE的设计目标是允许用户在应用程序完成之前实际执行并查看GUI。 为此,支持模块的生成将为回调函数提供骨架函数。
当用户在PAGE中保存时,会将设计保存为tcl文件,然后可以将其用作PAGE的自变量,从而允许用户修改或扩充GUI。 更重要的是,如果用PAGE拧紧它,则可以在保存GUI的位置重新启动该过程。 因此,请经常保存。 Tcl GUI设计文件不是可执行的独立脚本。 它包含Tcl / Tk代码,并用作tcl源命令的参数。
下图显示了PAGE支持的设计/实现循环。
![](https://img.kancloud.cn/a1/6a/a16ad1716712d7e7750b374e02135139_540x201.png)
PAGE生成上面显示的三个文件。 左侧的两个模块是将GUI窗口实现为Python程序所必需的。 作者构思的GUI模块完全由PAGE生成,而支持模块将使用GUI窗口包含应用程序所需的所有手动编码的Python。 可以将视为项目名称,并且必须是合法的Python标识符,因为生成的Python代码将在import语句中使用。
项目文件以Tcl / Tk模块的形式记录GUI窗口描述。 它用作PAGE的输入,用于后续的返工迭代。 它不是可执行程序。
每次对GUI设计进行一组修改时,您都将需要生成并测试新的GUI模块。 但是,仅当GUI修改引用新的回调函数时,才需要更改支持模块。 还有一些其他但不常见的情况。 (它们包括由诸如Label之类的小部件使用的Tkinter变量以及自定义小部件的定义。)
虚线旨在传达您的想法,即您不希望在每次修改GUI设计时都更改支持模块。 因此,PAGE具有用于生成GUI模块和支持模块的单独命令。 同样,GUI模块的生成有两个变体,即完整生成和更新支持模块。
第一次设计GUI时,一个人想要生成两个Python模块。 支撑模块将具有使用GUI模块所需的所有必要的样板; 即,即使没有向骨架回调函数添加任何手动代码,GUI模块和支持模块也应该是可执行程序。
使用GUI的后续修改,可能仅需要通过PAGE更新支持模块,以在GUI中为新引用的回调等添加骨架功能。 *不会删除任何代码* 。此外,还将保存所有生成文件的备份版本。
Please see [Rework](rework.md)
449:4 r mousemove נּლƟ㌠ଠƟ Ɵ 낼ä ዀ戻翽 em e ᭸მƟ true Ɵ �Ɵ Ɵ Ɵ true Ɵ Ɵ 䳠ﭏå
449:3 e 耀 㲰戹翽 em e mousemove Ɵ mousemove 翽简ჂƟ 넠ଅƟ 낤å ) mousemove mousemove ⶮI mousemove ƗƟ Ɵ 䳠ﭏæ mousemove I mousemove მƟƟ ㌠ଠƟ 났æ mousemove Ɵ mouseover ᭸მƟ mousemove Ɵ訠↤Ɵ ➠Ɵ ᨤꬦƔ 㶠଼Ɵ ꁠ↤Ɵ 낄é Ɵ Ɵ 낌ê mousemove Ɨ mousemove I mousemove Ɵ Ɵ 䳠ﭏê mousemove md) for more discussion of this world view.
- 介绍
- 更新记录
- X Concepts
- Visual Tcl
- 使用PAGE设计范例
- 项目目录配置
- Python 2 or Python 3
- Python编码和UTF-8
- 使用PAGE的简短说明
- PAGE的状态
- 安装
- PAGE界面
- 主菜单
- 子菜单
- 组件工具栏
- 属性编辑器
- 组件树
- 绑定操作窗口
- 菜单编辑器
- 首选项窗口
- Python控制台
- 回调窗口
- 应用窗口
- 颜色对话框
- 颜色
- 双显示器
- 默认值和首选项
- Preferences Windows
- Color Preferences
- Font Preferences
- 模块结构
- 风格和主题
- 使用PAGE
- 命名约定
- 概述
- Toplevel Geometry
- 别名
- 气球帮助-工具提示
- 选择和修改组件
- 修改组件位置和尺寸
- 锁定组件
- 填充容器
- 剪切,复制和粘贴
- Stash and Apply - Propagate Widget Options
- 菜单组件
- 回调函数
- 将事件链接到回调函数
- 创建绑定
- 为滚动组件创建绑定
- 定义回调函数
- 查看回调
- 指定字体
- Toplevel Widget
- 相对位置
- Tkinter变量类
- Ttk Widgets
- Scrolled Widgets
- Ttk Notebook and PNotebook
- Ttk Panedwindow
- Ttk Treeview
- Entry
- Ttk Entry
- Ttk Combobox
- Radiobuttons
- 文本和变量的奇异性
- Label
- Listbox
- Spinbox
- Scale and TScale
- TSeparator
- Sizegrip
- Custom Widgets
- Canvas
- 生成,检查和运行Python GUI
- 创建和保存代码模块
- 检查生成的Python模块
- 执行Python模块
- 将生成的Python模块加载到IDE中
- 具有多个顶级Windows的应用程序
- 修改光标
- 使用图像
- 动态组件
- 菜单
- 重建
- 自动更新支持模块
- 重用
- 模板
- 从现有项目中借用组件
- 范例
- 结语