настроить запись в поле со списком (GTK) - PullRequest
1 голос
/ 08 февраля 2012

Как я могу настроить текст в выпадающем списке, не зная его идентификатора? У меня есть поле со списком имен («Джек», «Эмили», «Пол», ...). По умолчанию комбо установлено на -1, но я хочу, чтобы оно было установлено на «Пол».

Вот мой код для объявления и заполнения комбо с помощью кортежа (id, fabName):

    self.cmbFabricant = builder.get_object("cmbFabricant")
    self.cmbFabricant.set_model(lstStore)
    self.cmbFabricant.set_entry_text_column(1)

Теперь я бы хотел установить выпадающий список для элемента под названием «Пол». Я думал, что смогу написать:

    self.cmbFabricant.set_active_id('Paul')

Я был не прав.

1 Ответ

1 голос
/ 08 февраля 2012

Я могу ошибаться, но я думаю, что set_active_id является новым в GTK + 3, а PyGTK - это GTK + 2. Если вы хотите использовать GTK + 3, вам нужно переключиться на PyGObject .

Но если вы застряли на PyGTK, вы можете легко обойти его, выполнив что-то вроде этого:

import gtk

def set_active_name(combobox, col, name):
    liststore = combobox.get_model()
    for i in xrange(len(liststore)):
        row = liststore[i]
        if row[col] == name:
            combobox.set_active(i)

window = gtk.Window()
window.connect("destroy", gtk.main_quit)

liststore = gtk.ListStore(int, str)
liststore.append([0, 'Jack'])
liststore.append([1, 'Emily'])
liststore.append([2, 'Paul'])

combobox = gtk.ComboBox()
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 1)
combobox.set_model(liststore)

set_active_name(combobox, 1, 'Paul')

window.add(combobox)
window.show_all()

gtk.main()

Я не уверен, есть ли более элегантный / эффективный способ, но это работает по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...