2012-02-08 3 views
1

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

Вот мой код, чтобы объявить и заполнить комбо с кортежем (идентификатор, 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

Я мог ошибаться, но я думаю, что 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() 

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

+0

Правильно, я редактировал свое предыдущее сообщение. Мой проект основан на GTK + 3. Спасибо за ответ. Я даю ему попробовать прямо сейчас. –

+0

Я не знаю, существует ли более элегантный способ, этот работал для меня. Благодарю. (разве вы не имеете в виду диапазон, а не xrange?) –

Смежные вопросы