Я начинаю писать программу с «быстро». Список желаемых языков будет одним из предпочтений. Пример:
languages = ["en", "de"]
(Автоматически созданный) быстрый код, который обрабатывает предпочтительную часть, выглядит следующим образом:
# 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'],
}
В графическом интерфейсе кажется, что выбранный виджет в gtk для списка - это ListStore (это не виджет, а модель, но он определен в файле Glade ...). Может кто-нибудь сказать мне, что будет работать для ListStore для 'getter'
, 'setter'
и 'changed'
в коде выше?
Подход выглядит простым для простых виджетов ввода и тому подобного, но я не знаю, как использовать его со списками.
В качестве альтернативы я бы, конечно, принял любой другой способ обработки списков в качестве предпочтений, при условии, что длина списка не является фиксированной.
python
gtk
application-development
quickly
xubuntix
источник
источник
Ответы:
Отказ от ответственности: я ничего не знал о быстрой, пока я не прочитал ваш пост, или о графическом программировании в целом в этом отношении. Поэтому я, честно говоря, не имею никакого дела, пытаясь ответить на этот вопрос :)
Тем не менее, быстро это аккуратный проект. Я кратко просканировал исходный шаблон и определил следующие потенциальные подходы для добавления предпочтений в стиле списка в виде списка:
set_widget_from_preference
иset_preference
в подклассе проекта из PreferencesDialog (подкласс является Preferences $ Projectname $ Dialog), и сделать что - то другое , когдаkey
илиwidget
ваша ListStore поддерживается TreeView виджет.Чтобы проверить их, я реализовал все три эти идеи - каждая работала так, как задумывалось, и AFAICT - одинаково. В конце концов, третий (в частности) показался мне наиболее чистым и ближе к обычаям, используемым во всем шаблоне, несмотря на то, что изначально ожидал обратного.
Вот шаги, которые я следовал за номером три ...
Используя glade через
quickly design
(быстро 11.10, кстати) и неукоснительно следуя этому руководству (часть 2) , добавьте виджет ScrolledWindow в Preferences $ PROJECTNAME $ Dialog.ui, поместите в него TreeView, назовите TreeViewlanguage_treeview
. При появлении запроса создайте новую модель ListStore для TreeView и назовите ее language_liststore и т. Д. ... в конце концов я получил нечто подобное:Затем добавьте каталог glade (data / ui / preferences_ $ PROJECTNAME $ _treeview.xml) со следующим содержимым:
Затем отредактируйте Настройки $ PROJECTNAME $ Dialog.ui, добавив ...
... наверх, под тегом require. И измените атрибут класса language_treeview на Preferences $ PROJECTNAME $ TreeView, чтобы подготовиться к следующему шагу.
Наконец, добавьте следующий элемент в список widget_methods в Предпочтения $ PROJECTNAME $ Dialog.py
И в конце того же файла (Предпочтения $ PROJECTNAME $ Dialog.py) добавьте
Если вы заинтересованы в том, чтобы увидеть мои попытки на один и два, я с радостью вам обязуюсь.
Редактировать: для случайного читателя замените любое вхождение $ PROJECTNAME $ на фактическое имя вашего быстрого проекта (как указано в
quickly create
).НТН!
источник
Я не пробовал «быстро» сам, но с моим опытом работы с GTK я бы использовал радио-кнопки для выбора языка.
Наблюдения за
toggled
событием вместе сbutton.get_active()
методом должно быть достаточно, чтобы проверить, что выбрал пользователь.источник
toggled
событие можно использовать как для выбранных, так и для невыбранных кнопок, поэтому этого должно быть достаточно.