5.11. Fonctionnalités avancées de l'interface graphique du module complémentaire
Le paquetage pyanaconda
contient plusieurs fonctions d'aide et d'utilité, ainsi que des constructions qui peuvent être utilisées par les hubs et les spokes. La plupart d'entre elles se trouvent dans le paquetage pyanaconda.ui.gui.utils
.
L'exemple de module complémentaire Hello World
démontre l'utilisation du gestionnaire de contenu englightbox
qui Anaconda utilise également. Ce gestionnaire de contenu peut placer une fenêtre dans une boîte lumineuse pour augmenter sa visibilité et la mettre en évidence pour empêcher les utilisateurs d'interagir avec la fenêtre sous-jacente. Pour démontrer cette fonction, l'exemple de module complémentaire contient un bouton qui ouvre une nouvelle fenêtre de dialogue ; le dialogue lui-même est un HelloWorldDialog spécial héritant de la classe GUIObject, qui est définie dans pyanaconda.ui.gui.init.
La classe dialog définit la méthode run qui exécute et détruit un dialogue Gtk interne accessible par l'attribut self.window, qui est rempli à l'aide d'un attribut de classe mainWidgetName ayant la même signification. Par conséquent, le code définissant le dialogue est très simple, comme le montre l'exemple suivant :
Exemple 5.9. Définition d'un dialogue de boîte de dialogue
# every GUIObject gets ksdata in init
dialog = HelloWorldDialog(self.data)
# show dialog above the lightbox
with self.main_window.enlightbox(dialog.window):
dialog.run()
Le code de l'exemple Defining an englightbox Dialog
crée une instance du dialogue et utilise ensuite le gestionnaire de contexte enlightbox pour exécuter le dialogue dans un cadre lumineux. Le gestionnaire de contexte a une référence à la fenêtre du rayon et n'a besoin que de la fenêtre du dialogue pour instancier le cadre lumineux pour le dialogue.
Une autre fonction utile fournie par Anaconda est la possibilité de définir un rayon qui apparaîtra à la fois pendant l'installation et après le premier redémarrage. L'utilitaire Initial Setup
est décrit dans Adding support for the Add-on graphical user interface (GUI). Pour qu'un rayon soit disponible à la fois dans Anaconda et dans Initial Setup, il doit hériter de la classe spéciale FirstbootSpokeMixIn
, également connue sous le nom de mixin
, en tant que première classe héritée définie dans le module pyanaconda.ui.common
.
Pour qu'un rayon soit disponible dans Anaconda et le mode de reconfiguration de l'Initial Setup, il doit hériter de la classe spéciale FirstbootSpokeMixIn
, également connue sous le nom de mixin
, en tant que première classe héritée définie dans le module pyanaconda.ui.common
.
Si vous souhaitez qu'un rayon donné ne soit disponible que dans la configuration initiale, ce rayon doit hériter de la classe FirstbootOnlySpokeMixIn
.
Pour qu'un rayon soit toujours disponible à la fois dans Anaconda et Initial Setup, le rayon doit redéfinir la méthode should_run
, comme le montre l'exemple suivant :
Exemple 5.10. Redéfinir la méthode should_run
@classmethod def should_run(cls, environment, data): """Run this spoke for Anaconda and Initial Setup""" return True
Le paquetage pyanaconda
offre de nombreuses fonctionnalités plus avancées, telles que les décorateurs @gtk_action_wait
et @gtk_action_nowait
, mais elles sortent du cadre de ce guide. Pour plus d'exemples, reportez-vous aux sources du programme d'installation.