2012-02-08 90 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