Je commence à écrire un programme avec «rapidement». Une liste des langues souhaitées sera une préférence. Exemple:
languages = ["en", "de"]
Le code (créé automatiquement) rapidement qui gère la partie des préférences ressemble à ceci:
# Define your preferences dictionary in the __init__.main() function.
# The widget names in the PreferencesTestProjectDialog.ui
# file need to correspond to the keys in the preferences dictionary.
#
# Each preference also need to be defined in the 'widget_methods' map below
# to show up in the dialog itself. Provide three bits of information:
# 1) The first entry is the method on the widget that grabs a value from the
# widget.
# 2) The second entry is the method on the widget that sets the widgets value
# from a stored preference.
# 3) The third entry is a signal the widget will send when the contents have
# been changed by the user. The preferences dictionary is always up to
# date and will signal the rest of the application about these changes.
# The values will be saved to desktopcouch when the application closes.
#
# TODO: replace widget_methods with your own values
widget_methods = {
'languages': ['getter', 'setter', 'changed'],
}
Dans l'interface graphique, il semble que le widget de choix dans gtk pour une liste soit un ListStore (qui n'est pas un widget, mais un modèle, mais il est défini dans le fichier Glade ...). Quelqu'un peut-il me dire ce qui fonctionnerait pour un ListStore pour le 'getter'
, 'setter'
et 'changed'
dans le code ci-dessus?
L'approche semble facile pour les widgets d'entrée simples et autres, mais je ne sais pas comment l'utiliser avec des listes.
Alternativement, j'accepterais bien entendu toute autre manière de traiter les listes en tant que préférences, à condition que la longueur de la liste ne soit pas fixe.
la source
Réponses:
Avis de non-responsabilité: je ne savais rien sur rapidement jusqu'à ce que j'ai lu votre message, ou sur la programmation gui en général d'ailleurs. Par conséquent, je n'ai honnêtement aucune entreprise tentant de répondre à cette question :)
Cela dit, rapidement est un projet soigné. J'ai analysé brièvement la source passe-partout et identifié les approches potentielles suivantes pour ajouter une préférence de style liste soutenue par ListStore:
set_widget_from_preference
etset_preference
dans la sous-classe du projet de PreferencesDialog (la sous-classe est Preferences $ PROJECTNAME $ Dialog), et faites quelque chose de différent lorsquekey
ouwidget
est votre widget TreeView soutenu par ListStore.Pour les tester, j'ai mis en œuvre ces trois idées - chacune fonctionnait comme prévu, et AFAICT, à l'identique. Au final, le troisième (en particulier) m'a paru le plus propre, et le plus proche des conventions utilisées tout au long du passe-partout, malgré l'attente initiale du contraire.
Voici les étapes que j'ai suivies pour le numéro trois ...
En utilisant glade via
quickly design
(rapidement 11.10, btw) et en suivant ce tutoriel (partie 2) , ajoutez un widget ScrolledWindow aux Préférences $ PROJECTNAME $ Dialog.ui, déposez un TreeView dessus, nommez le TreeViewlanguage_treeview
. Créez un nouveau modèle ListStore pour TreeView lorsque vous y êtes invité, et nommez-le language_liststore, etc ... finalement, je me suis retrouvé avec quelque chose comme ceci:Ensuite, ajoutez un catalogue de clairières (data / ui / preferences_ $ PROJECTNAME $ _treeview.xml) avec le contenu suivant:
Ensuite, modifiez les préférences $ PROJECTNAME $ Dialog.ui, en ajoutant ...
... en haut, sous la balise require. Et changez l'attribut de classe de language_treeview en Preferences $ PROJECTNAME $ TreeView, en préparation pour une étape ultérieure.
Enfin, ajoutez l'élément suivant à la liste widget_methods dans Préférences $ PROJECTNAME $ Dialog.py
Et à la fin du même fichier (Préférences $ PROJECTNAME $ Dialog.py), ajoutez
Si vous êtes intéressé à voir mes tentatives pour un et deux, je suis heureux d'obliger.
Modifier: pour le lecteur occasionnel, remplacez toute occurrence de $ PROJECTNAME $ par le nom réel de votre projet rapidement (comme spécifié dans
quickly create
).HTH!
la source
Je n'ai pas essayé «rapidement» moi-même, mais avec mon expérience GTK, j'utiliserais des boutons radio pour gérer la sélection de la langue.
Regarder l'
toggled
événement avec labutton.get_active()
méthode devrait suffire pour vérifier ce que l'utilisateur a sélectionné.la source
toggled
événement peut être utilisé à la fois pour les boutons sélectionnés et non sélectionnés, c'est pourquoi il devrait être suffisant.