Existe uma tag de preenchimento automático como controle para o / pygtk rapidamente?

1

Eu estou fazendo uma aplicação do tipo todo com o suporte de indicadores usando glade / python / pygtk / glade. Eu estou fazendo um formulário para salvar um item de Todo. Cada item pertencerá a 0 ou mais projetos.

Quando um usuário insere um nome de projeto em um campo de entrada de texto, eu quero que ele seja preenchido automaticamente com base em projetos existentes. Este widget deve se comportar de forma semelhante à entrada de texto ao preencher o formulário de pergunta no site (askubuntu.com). Abaixo está uma captura de tela do que quero dizer.

Por exemplo, quando o usuário quer adicionar um todo nos projetos "rapidamente" quando o usuário começa a digitar "qu *", ele deve sugerir todos os projetos disponíveis que começam com "qu" (por exemplo, "rápido", "rapidamente" "fila", "charlatão" etc.). O usuário pode pressionar a seta para baixo para selecionar a opção correta ou continuar digitando. Quando o usuário pressiona a barra de espaço, ele deve começar com uma nova sugestão.

Existe um controle / widget em pyGTK / rápido que eu possa usar para conseguir isso? Pontos de bônus se eu também puder listar um número ao lado de cada sugestão com o número de itens que pertencem a este projeto, semelhante à captura de tela abaixo.

    
por aspersieman 06.12.2012 / 07:41

1 resposta

3

Aqui está um exemplo simples:

from gi.repository import Gtk

class MyExample(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)

        liststore = Gtk.ListStore(str)
        for match in ["test1", "test2", "test3", "spam", "foo", "eggs", "bar"]:
            liststore.append([match])

        completion = Gtk.EntryCompletion()
        completion.set_model(liststore)
        completion.set_text_column(0)

        entry = Gtk.Entry()
        entry.set_completion(completion)
        self.add(entry)
        self.show_all()

if __name__ == "__main__":
    app = MyExample()
    Gtk.main()

Você só precisará preencher dinamicamente o liststore com os valores desejados. Exibir um número próximo a ele pode ser tão trivial quanto anexá-lo à string que você está adicionando ao liststore ou você pode criar uma segunda coluna nele. Isso tudo depende do seu código e não é possível responder, mas isso deve fazer você ir.

Você pode até criar a maior parte do código acima no Glade, se quiser.

    
por Timo 06.12.2012 / 13:30