Ich fange an, ein Programm mit 'schnell' zu schreiben. Eine Liste der gewünschten Sprachen ist eine Präferenz. Beispiel:
languages = ["en", "de"]
Der (automatisch erstellte) Schnellcode, der den Voreinstellungsteil verarbeitet, sieht folgendermaßen aus:
# 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'],
}
In der GUI scheint es, als ob das Widget der Wahl in gtk für eine Liste ein ListStore ist (das kein Widget, sondern ein Modell ist, aber in der Glade-Datei definiert ist ...). Kann mir jemand sagen , was für ein ListStor für die funktionieren würde 'getter'
, 'setter'
und 'changed'
in dem obigen Code?
Der Ansatz sieht für einfache Eintrags-Widgets und dergleichen einfach aus, aber ich weiß nicht, wie ich ihn mit Listen verwenden soll.
Alternativ würde ich natürlich jede andere Möglichkeit akzeptieren, mit Listen als Präferenzen umzugehen, vorausgesetzt, die Länge der Liste ist nicht festgelegt.
quelle
Antworten:
Haftungsausschluss: Ich wusste nichts schnelles, bis ich Ihren Beitrag gelesen habe, oder über GUI-Programmierung im Allgemeinen. Daher habe ich ehrlich gesagt nichts damit zu tun, diese Frage zu beantworten :)
Das heißt, schnell ist ein ordentliches Projekt. Ich habe die Boilerplate-Quelle kurz gescannt und die folgenden möglichen Ansätze zum Hinzufügen einer ListStore-gestützten Listenstilpräferenz identifiziert:
set_widget_from_preference
undset_preference
in der Unterklasse von PreferencesDialog des Projekts (die Unterklasse ist Preferences $ PROJECTNAME $ Dialog) und führen Sie etwas anderes aus, wennkey
oder wennwidget
Ihr von ListStore unterstütztes TreeView-Widget verwendet wird.Um sie zu testen, habe ich alle drei dieser Ideen umgesetzt - jede funktionierte wie beabsichtigt und AFAICT identisch. Am Ende schien mir der dritte (insbesondere) der sauberste zu sein und näher an den Konventionen zu sein, die auf der gesamten Kesselplatte angewendet wurden, obwohl zunächst das Gegenteil erwartet wurde.
Hier sind die Schritte, die ich für Nummer drei befolgt habe ...
quickly design
Fügen Sie mit Glade via (schnell 11.10, übrigens) und nach diesem Tutorial (Teil 2) ein ScrolledWindow-Widget zu den Einstellungen $ PROJECTNAME $ Dialog.ui hinzu, legen Sie eine TreeView darauf ab und benennen Sie die TreeViewlanguage_treeview
. Erstellen Sie ein neues ListStore-Modell für die TreeView, wenn Sie dazu aufgefordert werden, und nennen Sie es language_liststore usw. Am Ende hatte ich Folgendes:Fügen Sie als Nächstes einen Glade-Katalog (data / ui / settings_ $ PROJECTNAME $ _treeview.xml) mit den folgenden Inhalten hinzu:
Bearbeiten Sie dann die Einstellungen $ PROJECTNAME $ Dialog.ui und fügen Sie ...
... nach oben unter dem Tag "require". Ändern Sie das Klassenattribut language_treeview in Preferences $ PROJECTNAME $ TreeView, um sich auf einen späteren Schritt vorzubereiten.
Fügen Sie abschließend das folgende Element zur Liste widget_methods in den Einstellungen $ PROJECTNAME $ Dialog.py hinzu
Und fügen Sie am Ende derselben Datei (Einstellungen $ PROJECTNAME $ Dialog.py) hinzu
Wenn Sie daran interessiert sind, meine Versuche für eins und zwei zu sehen, bin ich gerne bereit, dies zu tun.
Bearbeiten: Ersetzen Sie für den Gelegenheitsleser jedes Vorkommen von $ PROJECTNAME $ durch den tatsächlichen Namen Ihres schnellen Projekts (wie in angegeben
quickly create
).HTH!
quelle
Ich habe nicht ‚schnell‘ selber ausprobiert, aber mit meiner GTK Erfahrung würde ich verwenden Radiobuttons zur Sprachauswahl zu behandeln.
Das Beobachten des
toggled
Ereignisses zusammen mit derbutton.get_active()
Methode sollte ausreichen, um zu überprüfen, was der Benutzer ausgewählt hat.quelle
toggled
Ereignis kann auch sowohl für ausgewählte als auch für nicht ausgewählte Schaltflächen verwendet werden. Deshalb sollte es ausreichen.