Есть ли тег автозаполнения, например, для управления быстрой /pygtk?

Я делаю приложение, похожее на задачу с поддержкой индикаторов, используя glade / python / pygtk / glade. Я делаю форму для сохранения предмета Todo. Каждая задача будет принадлежать 0 или более проектам.

Когда пользователь вводит имя проекта в поле ввода текста, я хочу, чтобы оно автоматически заполнялось на основе существующих проектов. Этот виджет должен вести себя аналогично текстовому вводу при заполнении формы "задать вопрос" на этом сайте (Ask-ubuntu.ru). Ниже скриншот того, что я имею в виду.

Например, когда пользователь хочет добавить задачу в проекты "быстро", как только пользователь начинает вводить "qu *", он должен предложить все доступные проекты, начинающиеся с "qu" (например, "быстрый", "быстрый", "очередь"), "шарлатанство" и т. д.). Пользователь может нажать стрелку вниз, чтобы выбрать правильный вариант или продолжить ввод. Когда пользователь нажимает пробел, он должен начинаться с нового предложения.

Есть ли элемент управления / виджет в pyGTK/ быстро, что я могу использовать для этого? Бонусные баллы, если я могу также перечислить число рядом с каждым предложением с количеством элементов todo, которые принадлежат этому проекту, как на скриншоте ниже.

Автозаполнение на AskUbuntu.com

1 ответ

Решение

Вот простой пример:

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()

Вам просто нужно динамически заполнить список списков нужными значениями. Отображение числа рядом с ним может быть таким же простым, как добавление его к строке, которую вы добавляете в хранилище списков, или вы можете создать в ней второй столбец. Это все зависит от вашего кода и не может ответить, но это должно помочь вам.

Вы даже можете создать большую часть приведенного выше кода в Glade, если хотите.

Другие вопросы по тегам