Zaczynam pisać program „szybko”. Lista pożądanych języków będzie jedną preferencją. Przykład:
languages = ["en", "de"]
(Automatycznie utworzony) szybki kod, który obsługuje część preferencji, wygląda następująco:
# 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'],
}
W GUI wygląda na to, że widgetem z listy w gtk dla listy jest ListStore (który nie jest widżetem, ale modelem, ale jest zdefiniowany w pliku Glade ...). Czy ktoś może mi powiedzieć, co będzie działać na ListStore dla osób 'getter'
, 'setter'
a 'changed'
w powyższym kodzie?
Podejście to wygląda na proste widżety wprowadzania i tym podobne, ale nie wiem, jak go używać z listami.
Alternatywnie, oczywiście zaakceptowałbym każdy inny sposób traktowania list jako preferencje, pod warunkiem, że długość listy nie jest stała.
python
gtk
application-development
quickly
xubuntix
źródło
źródło
Odpowiedzi:
Oświadczenie: Nie wiedziałem nic o szybkim czasie, dopóki nie przeczytałem twojego postu, ani ogólnie o programowaniu GUI. Dlatego szczerze mówiąc nie mam biznesu, który próbuje odpowiedzieć na to pytanie :)
To powiedziawszy, szybko jest zgrabnym projektem. Zeskanowałem krótko źródło płyty kotła i zidentyfikowałem następujące potencjalne podejścia do dodawania preferencji stylu listy opartej na ListStore:
set_widget_from_preference
iset_preference
w podklasie projektu PreferencesDialog (podklasą są Preferencje $ PROJECTNAME $ Dialog) i zrób coś innego, gdykey
lubwidget
jest twoją widżetem TreeView w oparciu o ListStore.Aby je przetestować, wdrożyłem wszystkie trzy z tych pomysłów - każdy działał zgodnie z przeznaczeniem, i AFAICT identycznie. Ostatecznie trzeci (w szczególności) wydawał mi się najczystszy i bliższy konwencjom stosowanym na całej płycie kotła, choć początkowo spodziewałam się czegoś przeciwnego.
Oto kroki, które wykonałem dla numeru trzy ...
Używając polany przez
quickly design
(szybko 11.10, btw) i swobodnie postępując zgodnie z tym samouczkiem (część 2) , dodaj widżet ScrolledWindow do Preferencji $ PROJECTNAME $ Dialog.ui, upuść na niego TreeView, nazwij TreeViewlanguage_treeview
. Po wyświetleniu monitu utwórz nowy model ListStore dla TreeView i nazwij go language_liststore itp. W końcu otrzymałem coś takiego:Następnie dodaj katalog polany (data / ui / preferences_ $ PROJECTNAME $ _treeview.xml) z następującą zawartością:
Następnie edytuj Preferencje $ PROJECTNAME $ Dialog.ui, dodając ...
... na górę, pod tagiem wymaga. I zmień atrybut klasy language_treeview na Preferencje $ PROJECTNAME $ TreeView, przygotowując się do kolejnego kroku.
Na koniec dodaj następujący element do listy widget_methods w Preferencjach $ PROJECTNAME $ Dialog.py
I na końcu tego samego pliku (Preferencje $ PROJECTNAME $ Dialog.py) dodaj
Jeśli jesteś zainteresowany zobaczeniem moich prób dla pierwszego i drugiego, z przyjemnością to zrobię.
Edycja: Dla zwykłego czytelnika zamień każde wystąpienie $ PROJECTNAME $ na rzeczywistą nazwę twojego szybkiego projektu (jak określono w
quickly create
).HTH!
źródło
Sam nie próbowałem „szybko”, ale z doświadczeniem GTK korzystałem z Przycisków Radiowych do obsługi wyboru języka.
Obejrzenie
toggled
zdarzenia wraz zbutton.get_active()
metodą powinno wystarczyć, aby sprawdzić, co wybrał użytkownik.źródło
toggled
zdarzenie może być stosowany zarówno dla wybranych i nie wybranych przycisków, dlatego powinno wystarczyć.