Проблема с кодом, на который вы ссылаетесь выше, заключается в том, что ComboBox
на самом деле имеет только 1 элемент, когда вы начинаете редактирование, что делает функцию раскрывающегося списка бесполезной (и, следовательно, неактивной). Чтобы заставить его вести себя так, как я подозреваю, вы хотите, все, что вам нужно сделать, это использовать другой сигнал для выполнения self.populate_combo
. Я добавил две строки после создания дерева, чтобы заставить его работать:
treeview = gtk.TreeView(liststore_hardware)
sel = treeview.get_selection()
sel.connect("changed", self.populate_combo)
То есть я сделал измененный выбор, вызывающий заполнение комбо, что подразумевало, что в них было более одного элемента, когда управление было возвращено в основной цикл. И, следовательно, выпадающий список работал.
Я также закомментировал предыдущий сигнал editing-started
, так как он ничего не добавляет к текущей структуре программы.
window.connect("destroy", lambda w: gtk.main_quit())
#self.cellrenderer_combo.connect("editing-started", self.populate_combo)
self.cellrenderer_combo.connect("edited", self.combo_changed, liststore_hardware)
Изменить:
Если подумать, модель представляет собой None
после запуска __init__
, а не 1-длины на строку, как я писал выше, что делает отсутствие выпадающих функций еще более разумным.
Комментарий:
Код, на который вы ссылаетесь, и мое изменение к нему рациональны только в том случае, если изменение строк (или редактирование) вызывает острую необходимость переписать файл ListStore
. Я не совсем уверен, какой тип сценария потребует этого. Если, с другой стороны, содержимое TreeView
и ComoBox
' ListStore
различается в результате действия поиска или фильтрации, выполненной в другом месте, то этот поиск, а не изменение строк, должен вызывать populate_combo
.
Таким образом, альтернативное решение в рамках имеющегося кода, мое предложенное выше событие также можно закомментировать, а простое
self.populate_combo()
добавить в качестве последней строки функции init
.
Кроме того, если возникнет необходимость повторного заполнения комбинаций во время работы приложения, я бы предложил изменить текущую ListStore
, а не создавать новую каждый раз, если изменения не будут значительными (в которых случае сделать новый, наверное, быстрее и проще всего).
person
deinonychusaur
schedule
26.12.2012