# 具有多个顶级Windows的应用程序
用户通常会希望构建具有多个顶层窗口的应用程序。 由于PAGE是为仅指定一个这样的窗口而建立的,用户如何进行? 我认为最好的方法是为每个顶级窗口创建单独的模块,并让主GUI的支持模块使用import语句将其导入。 然后可以使用模块中的创建功能来创建窗口。 此方法用于Vrex示例。 在这里,我使用PAGE为两个单独的程序GUI构造框架:
* vrex GUI模块和关联的vrex_support模块。 vrex GUI模块是程序的主要模块。
* vrex_help GUI模块和关联的vrex_help_support模块。
我希望当在vrex GUI中选择“帮助”按钮时出现vrex_help GUI。 “帮助”按钮的命令是vrex_support.py中的帮助例程。因此,vrex_support.py中的以下代码将显示帮助窗口。
~~~
import vrex_help
def help():
vrex_help.create_Vrex_Help(root)
~~~
当然,在这种情况下,两个程序之间的交互很少,从而简化了事情。 如下例所示,参数“ root”将帮助窗口绑定到主窗口。progress_bar示例中使用了相同的技术,该示例显示了窗口之间的更多交互,包括从主例程内部对进度条窗口的控制。 这两个模块是main.py和progress_bar.py。 在main.py中,我们有
~~~
import progress_bar
self.bar = progress_bar.create_Progress_Bar(root)
~~~
在这里,参数root将两个窗口绑定在一起,并且创建例程返回Progress_Bar对象,该对象允许主GUI访问Progress_Bar对象的所有功能和属性,从而允许主GUI推进进度条并关闭进度 酒吧。在python代码中创建了特殊功能,以方便窗口的创建和销毁。
~~~
w = None
def create_New_Toplevel_1(root, *args, **kwargs):
'''Starting point when module is imported by another program.'''
global w, w_win, rt
rt = root
w = Toplevel (root)
top = New_Toplevel_1 (w)
unknown_support.init(w, top, *args, **kwargs)
return (w, top)
def destroy_New_Toplevel_1():
global w
w.destroy()
w = None
~~~
可以使用围绕“ *args,**kwargs”用法构建的标准Python技术将可变数量的参数传递给支持模块的init函数。 例如,您可能有类似以下在双重示例中使用的代码:
~~~
p_dict_1 = {'geom': "+200+650", 'instance': 1, 'color' : 'firebrick'}
p_dict_2 = {'geom': "+1000+650", 'instance': 2, 'color' : 'plum'}
def open_two():
print "open_two starts"
firebrick = called.create_Called(root,param=p_dict_1)
plum = called.create_Called(root,param=p_dict_2)
~~~
一个常见的问题是如何在模块之间共享全局变量。 一个很好的参考是如何在模块之间共享全局变量?如果您动态创建辅助窗口小部件并希望确保只有一个实例form2,则可以使用以下代码:
~~~
import form2
# If form2 already exists then destroy it and create it anew. I only want
# one. So I play games with form2_w.
global form2_w
if 'form2_w' in globals()
print 'its there'
form2_w.destroy()
(form2_w, form2_top) = form2.create_New_Toplevel(root)
~~~
- 介绍
- 更新记录
- 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的应用程序
- 修改光标
- 使用图像
- 动态组件
- 菜单
- 重建
- 自动更新支持模块
- 重用
- 模板
- 从现有项目中借用组件
- 范例
- 结语