Estoy empezando a escribir un programa con 'rápidamente'. Una lista de idiomas deseados será una preferencia. Ejemplo:
languages = ["en", "de"]
El código (creado automáticamente) rápidamente que maneja la parte de preferencia se ve así:
# 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'],
}
En la GUI, parece que el widget de elección en gtk para una lista es un ListStore (que no es un widget, sino un modelo, pero está definido en el archivo Glade ...). ¿Alguien puede decirme qué funcionaría para un ListStore para 'getter'
, 'setter'
y 'changed'
en el código anterior?
El enfoque parece fácil para widgets de entrada simples y demás, pero no sé cómo usarlo con listas.
Alternativamente, por supuesto, aceptaría cualquier otra forma de tratar las listas como preferencias, siempre que la longitud de la lista no sea fija.
python
gtk
application-development
quickly
xubuntix
fuente
fuente
Respuestas:
Descargo de responsabilidad: no supe nada rápidamente hasta que leí tu publicación, o sobre la programación gui en general para el caso. Por lo tanto, sinceramente, no tengo nada que tratar de responder esta pregunta :)
Dicho esto, rápidamente es un proyecto ordenado. Escaneé brevemente la fuente repetitiva e identifiqué los siguientes enfoques potenciales para agregar una preferencia de estilo de lista respaldada por ListStore:
set_widget_from_preference
yset_preference
en la subclase de PreferencesDialog del proyecto (la subclase es Preferences $ PROJECTNAME $ Dialog), y haga algo diferente cuandokey
owidget
sea su widget TreeView respaldado por ListStore.Para probarlos, implementé las tres ideas: cada una funcionó según lo previsto y AFAICT, de forma idéntica. Al final, el tercero (en particular) me pareció el más limpio y más cercano a las convenciones utilizadas en toda la repetitiva, a pesar de que inicialmente esperaba lo contrario.
Aquí están los pasos que seguí para el número tres ...
Usando glade via
quickly design
(rápidamente 11.10, por cierto), y siguiendo libremente este tutorial (parte 2) , agregue un widget ScrolledWindow a las Preferencias $ PROJECTNAME $ Dialog.ui, suelte un TreeView sobre él, nombre TreeViewlanguage_treeview
. Cree un nuevo modelo ListStore para TreeView cuando se le solicite, y asígnele el nombre language_liststore, etc. Finalmente terminé con algo como esto:A continuación, agregue un catálogo glade (data / ui / preferencias_ $ PROJECTNAME $ _treeview.xml) con el siguiente contenido:
Luego, edite Preferencias $ PROJECTNAME $ Dialog.ui, agregando ...
... hacia arriba, debajo de la etiqueta require. Y cambie el atributo de clase de language_treeview a Preferencias $ PROJECTNAME $ TreeView, en preparación para un paso posterior.
Finalmente, agregue el siguiente elemento a la lista widget_methods en Preferencias $ PROJECTNAME $ Dialog.py
Y al final del mismo archivo (Preferencias $ PROJECTNAME $ Dialog.py), agregue
Si está interesado en ver mis intentos de uno y dos, estoy feliz de hacerlo.
Editar: para el lector casual, reemplace cualquier aparición de $ PROJECTNAME $ con el nombre real de su proyecto rápido (como se especifica en
quickly create
).HTH!
fuente
No lo he intentado 'rápidamente', pero con mi experiencia GTK usaría botones de radio para manejar la selección de idioma.
Mirar el
toggled
evento junto con elbutton.get_active()
método debería ser suficiente para verificar lo que el usuario ha seleccionado.fuente
toggled
evento se puede usar tanto para botones seleccionados como no seleccionados, por eso debería ser suficiente.