Estou começando a escrever um programa com 'rapidamente'. Uma lista dos idiomas desejados será uma preferida. Exemplo:
languages = ["en", "de"]
O código (criado automaticamente) rapidamente que lida com a parte preferencial se parece com:
# 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'],
}
Na GUI, parece que o widget escolhido no gtk para uma lista é um ListStore (que não é um widget, mas um modelo, mas está definido no arquivo Glade ...). Alguém pode me dizer o que iria trabalhar para um ListStore para o 'getter'
, 'setter'
e 'changed'
no código acima?
A abordagem parece fácil para widgets de entrada simples e similares, mas não sei como usá-la com listas.
Como alternativa, eu obviamente aceitaria qualquer outra maneira de lidar com listas como preferências, desde que o comprimento da lista não seja fixo.
python
gtk
application-development
quickly
xubuntix
fonte
fonte
Respostas:
Isenção de responsabilidade: eu não sabia nada rapidamente até ler sua postagem ou sobre programação de GUI em geral para esse assunto. Portanto, sinceramente, não tenho negócios tentando responder a essa pergunta :)
Dito isto, rapidamente é um projeto interessante. Examinei brevemente a fonte do padrão e identifiquei as seguintes abordagens em potencial para adicionar uma preferência de estilo de lista suportada pelo ListStore:
set_widget_from_preference
eset_preference
na subclasse de PreferencesDialog do projeto (a subclasse é Preferences $ PROJECTNAME $ Dialog) e faça algo diferente quandokey
ouwidget
for o widget TreeView suportado pelo ListStore.Para testá-las, eu implementei todas essas três idéias - cada uma funcionou como pretendido e a AFAICT, de forma idêntica. No final, o terceiro (em particular) me pareceu o mais limpo e mais próximo das convenções usadas em todo o painel, apesar de inicialmente esperar o contrário.
Aqui estão os passos que eu segui para o número três ...
Usando o glade via
quickly design
(rapidamente 11.10, btw) e seguindo este tutorial (parte 2) , adicione um widget ScrolledWindow ao Preferences $ PROJECTNAME $ Dialog.ui, solte um TreeView nele e nomeie o TreeViewlanguage_treeview
. Crie um novo modelo ListStore para o TreeView quando solicitado e nomeie-o language_liststore, etc ... eventualmente, acabei com algo assim:Em seguida, adicione um catálogo glade (data / ui / preferências_ $ PROJECTNAME $ _treeview.xml) com o seguinte conteúdo:
Em seguida, edite as Preferências $ PROJECTNAME $ Dialog.ui, adicionando ...
... para o topo, abaixo da marca requer. E altere o atributo de classe de language_treeview para Preferences $ PROJECTNAME $ TreeView, em preparação para uma etapa posterior.
Por fim, adicione o seguinte elemento à lista widget_methods em Preferences $ PROJECTNAME $ Dialog.py
E no final do mesmo arquivo (Preferências $ PROJECTNAME $ Dialog.py), adicione
Se você estiver interessado em ver minhas tentativas de uma e duas, fico feliz em agradecer.
Editar: para o leitor casual, substitua qualquer ocorrência de $ PROJECTNAME $ pelo nome real do seu projeto rápido (conforme especificado em
quickly create
).HTH!
fonte
Eu não tentei 'rapidamente', mas com a minha experiência no GTK, usaria os botões de opção para lidar com a seleção de idiomas.
Observar o
toggled
evento junto com obutton.get_active()
método deve ser suficiente para verificar o que o usuário selecionou.fonte
toggled
evento pode ser usado para botões selecionados e não selecionados, é por isso que deve ser suficiente.