2012-02-08 40 views
1

如何在不知道其ID的情况下设置组合框的文本?我有一个名称列表('Jack','Emily','Paul')的组合框。默认情况下,组合设置为-1,但我希望将其设置为“Paul”。设置组合框的条目(gtk)

这里是我的代码以元组申报和填充组合(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

我可能是错的,但我认为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。感谢您的回答。我现在就试试看。 – 2012-02-09 09:44:52

+0

我不知道是否有更优雅的方式存在,这一个为我工作。谢谢。 (你不是指范围而不是xrange?) – 2012-02-09 10:13:59