# Custom Widgets
在编写照片管理器时,我需要使用滚动画布来显示照片。我找不到滚动画布小部件的通用候选对象,但在网络上发现了几种可行的变体。因此,我实现了对用户设计的自定义小部件的支持,这些小部件可以在PAGE中进行操作,但需要用户提供Python实现。因此,如果我遗漏了某些内容,并且可以想到它的tkinter实现,则PAGE可以处理它。
PAGE将“自定义”小部件显示为带有标题“自定义小部件”的文本小部件,并且可以像放置任何其他小部件一样放置和调整大小。但是,由于尚未在PAGE中定义窗口小部件,因此谈论在属性编辑器中修改属性是没有意义的,除了“ variant”是在4.15中新增并在下面进行描述的。在4.15版中,属性编辑器不显示其他属性。所有其他属性必须在小部件定义代码中处理。生成的Python将其称为在支持模块中定义的类。为了允许在支持模块完成之前执行GUI,支持模块中包含以下行:
~~~
Custom = Frame
~~~
然后,用户使用自己选择的,将其自定义窗口小部件的代码作为一个类插入,并在该代码后加上以下一行:
~~~
Custom = <class_name>
~~~
这就是将您放置在GUI中的小部件与支持模块中的实现类代码链接起来的魔力。请参阅自定义小部件示例。
当然,自定义窗口小部件的Python实现可以在一个单独的Python模块中,该模块可以导入到支持模块中。
在版本4.15中,自定义小部件的概念已扩展了两种方式。首先,现在可以在GUI中包含多个自定义窗口小部件。
其次,在同一个GUI中也可能有不止一种自定义窗口小部件。本质上实现的是一个带有各种变体的Custom窗口小部件,每个变体都通过单独的用户提供的Python实现来实现。为此,PAGE为“自定义”窗口小部件赋予了新属性“变量”,可以像在其他任何窗口小部件中的任何其他属性一样在“属性编辑器”中对其进行修改。 variant属性创建一个单独的名称,以在GUI模块中使用,并与单独的Python小部件实现绑定。如果为属性指定了值(名称),则该值将附加到名称“自定义”后,并且在生成Python代码时,将使用扩展名作为类名。如果variant属性留空,则类名将像以前一样是“ Custom”。例如,如果为项目d中的小部件“ Custom1”指定了变量“ p”,为小部件“ Custom2”指定了变量“ q”,则在GUI模块“ d.py”中生成了以下几行:
~~~
self.Custom1 = d_support.Customp(top)
self.Custom1.place(relx=0.35, rely=0.24, relheight=0.16, relwidth=0.21)
self.Custom2 = d_support.Customq(top)
self.Custom2.place(relx=0.42, rely=0.62, relheight=0.16, relwidth=0.21)
~~~
并且在支持模块“ d_support.py”中生成以下内容:
~~~
Customp = Frame
Customq = Frame
~~~
用户将名称“ Custom\_p”和“ Custom\_q”更改为他或她希望使用的自定义窗口小部件类的名称,并且您已为其使用Python实现。 因此,在GUI中有两个不同的自定义小部件。 显然,自定义窗口小部件的数量不限于两个。
我敦促您仔细查看[ScrolledCheckedListBox]()示例,以查看使用Greg Walters编写的自定义小部件的绝佳示例。 Greg Walters也编写了广泛的自述文件。 此示例有一个自定义小部件和其他几个PAGE小部件。
将其视为名称问题。 在上面的代码段中,Customp是在支持模块中定义的Class的名称或同义词,Custom1是通过执行Customp类创建的对象或实例的名称。 如果希望在支持模块中操作Customp实例,则将该实例称为w.Custom1。
在支持模块中,该行:
~~~
Customp = Frame
~~~
将类重命名为Frame,以便在生成GUI模块和支持模块时可以执行GUI模块,并且Customp小部件将显示为框架。 当您开始编写“真实的”支持模块以使用自己的“本地”窗口小部件时,可以替换上面的代码行,或使用以下代码:
~~~
Customp = Homegrown
~~~
使用两行代码都可以,这相当于两次为Customp分配名称。 只要确保最后一行紧跟Frame即可。 在导入支持模块时执行分配,这是在实例化Customp类之前发生的,因此使用了预期的类定义Homegrown。
- 介绍
- 更新记录
- 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的应用程序
- 修改光标
- 使用图像
- 动态组件
- 菜单
- 重建
- 自动更新支持模块
- 重用
- 模板
- 从现有项目中借用组件
- 范例
- 结语