В документации Gtk4 указано:
GtkDropDown знает, как получать строки из элементов в GtkStringList
это модель, которую я изначально пытался использовать.
Об этом также говорится в описании метода set_enable_search()
Обратите внимание, что GtkDropDown:expression должен быть установлен для работы поиска.
Я искал на GitLab и GitHub другие проекты и то, как они это делают, но все методы, которые я нашел, похоже, не работают для меня, выдавая ошибки в Python или напрямую игнорирование ввода текста.
После нескольких попыток вот фрагмент последней попытки, которая выдает ValueError: последовательность строк имеет неправильное количество элементов в model.append(Timezone(_(tz)))
Код: Выделить всё
# unrelated code above
model = Gtk.ListStore(GObject.GType(Timezone))
for tz in pytz.common_timezones:
model.append(Timezone(_(tz)))
dropdown = Gtk.DropDown()
dropdown.set_model(model)
dropdown.set_enable_search(True)
dropdown.set_expression(Gtk.PropertyExpression(GObject.GType(Timezone), None, "name"))
self.action_row.add_suffix(dropdown) # parent defined above
# unrelated code below
Код: Выделить всё
from gi.repository import GObject
class Timezone(GObject.GObject):
def __init__(self, name):
__gtype_name__ = "Timezone"
self.name = name
def __len__(self):
return len(self.name)
def __str__(self):
return self.name