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 工具在 为 Add-on 图形用户界面(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 修饰符,但它们不在本指南范围之内。有关更多示例,请参阅安装程序的源。