5.11. 附加组件 GUI 高级功能
pyanaconda
软件包包含多个帮助程序和工具函数,以及用于 hub 和 spoke 的结构。其中大多数位于 pyanaconda.ui.gui.utils
软件包中。
Hello World
附加组件示例演示了englightbox
内容管理器的用法,Anaconda 也使用它。此内容管理器可以将窗口置于 lightbox 中,以提高其可见性并聚焦它,以防止用户与底层窗口进行交互。为了演示此功能,示例附加组件包含一个打开新对话框窗口的按钮;对话框本身是一个继承于 GUIObject 类的特殊 HelloWorldDialog,其在 pyanaconda.ui.gui.init 中定义。
对话框类定义运行和销毁可通过 self.window 属性访问的内部 Gtk 对话框的 run 方法,其使用具有同样含义的 mainWidgetName 类属性填充。因此,定义对话框的代码非常简单,如下例所示:
例 5.9. 定义 englightbox 对话框
# every GUIObject gets ksdata in init
dialog = HelloWorldDialog(self.data)
# show dialog above the lightbox
with self.main_window.enlightbox(dialog.window):
dialog.run()
定义 englightbox 对话框
示例代码会创建一个对话框实例,然后使用 enlightbox 内容管理器在 lightbox 中运行对话框。上下文管理器有一个对 spoke 窗口的引用,只需要对话框的窗口来实例化对话框的 lightbox 。
Anaconda 提供的另一个有用功能是能够定义一个 spoke ,其在安装期间和第一次重启后将显示。Initial Setup
工具在 为附加组件图形用户界面(GUI)添加支持 中进行了描述。要使一个 spoke 在 Anaconda 和 Initial Setup 中都可用,它必须继承特殊的 FirstbootSpokeMixIn
类(也称为 mixin
),来作为 pyanaconda.ui.common
模块中定义的第一个继承的类。
要在 Anaconda 中提供 spoke 和 Initial Setup 的重新配置模式,它必须继承特殊的 FirstbootSpokeMixIn
类,也称为 mixin
,作为 pyanaconda.ui.common
模块中定义的第一个继承类。
如果您只想在 Initial Setup 中提供一个特定的 spoke,则这个 spoke 应该继承 FirstbootOnlySpokeMixIn
类。
要使 spoke 始终在 Anaconda 和 Initial Setup 中都可用,spoke 应重新定义 should_run
方法,如下例所示:
例 5.10. 重新定义 should_run 方法
@classmethod def should_run(cls, environment, data): """Run this spoke for Anaconda and Initial Setup""" return True
pyanaconda
软件包提供了更多高级的功能,如 @gtk_action_wait
和 @gtk_action_nowait
修饰符,但它们不在本指南范围之内。有关更多示例,请参阅安装程序的源。