🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 使用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:4rmousemoveנּლƟ㌠ଠƟ଍Ɵ낼äዀ戻翽eme᭸მƟtrue଍Ɵ�଍Ɵ ૜ƟƟtrue଍Ɵ଍Ɵ䳠ﭏå 449:3e耀㲰戹翽ememousemoveƟmousemove翽简ჂƟ넠ଅƟ낤å)mousemovemousemoveⶮImousemoveƗ଍Ɵ଍Ɵ䳠ﭏæmousemove￿￿Imousemove᫰მƟ଍Ɵ㌠ଠƟ났æmousemoveƟmouseover᭸მƟmousemoveƟ訠↤Ɵ➠଎ƟᨤꬦƔ㶠଼Ɵꁠ↤Ɵ낄é଍Ɵ଍Ɵ낌êmousemoveƗmousemoveImousemove଍Ɵ଍Ɵ䳠ﭏêmousemovemd) for more discussion of this world view.