设置组合框(gtk)的条目

设置组合框(gtk)的条目,gtk,python-3.x,Gtk,Python 3.x,我如何在不知道其id的情况下设置组合框的文本?我有一个组合框,里面有一个名字列表('Jack','Emily','Paul',…)。默认情况下,组合设置为-1,但我希望它设置为“Paul” 下面是我用元组(id,fabName)声明和填充组合的代码: 现在,我想在名为“Paul”的项目上设置组合框。我想我可以写: self.cmbFabricant.set_active_id('Paul') 我错了。我可能错了,但我认为设置活动id在GTK+3中是新的,而PyGTK是GTK+2。如果你

我如何在不知道其id的情况下设置组合框的文本?我有一个组合框,里面有一个名字列表('Jack','Emily','Paul',…)。默认情况下,组合设置为-1,但我希望它设置为“Paul”

下面是我用元组(id,fabName)声明和填充组合的代码:

现在,我想在名为“Paul”的项目上设置组合框。我想我可以写:

    self.cmbFabricant.set_active_id('Paul')

我错了。

我可能错了,但我认为
设置活动id
在GTK+3中是新的,而PyGTK是GTK+2。如果你想使用GTK+3,你必须切换到

但是,如果您被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()

我不确定是否有更优雅/高效的方法,但这至少有效。

我可能错了,但我认为
set\u active\u id
在GTK+3中是新的,而PyGTK是GTK+2。如果你想使用GTK+3,你必须切换到

但是,如果您被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()

我不确定是否有更优雅/高效的方法,但这至少有效。

是的,我已经编辑了我以前的消息。我的项目是基于GTK+3。谢谢你的回答。我现在就试一下。我不知道是否还有更优雅的方式存在,这一种对我很有效。谢谢(你不是说range而不是xrange吗?)好的,我已经编辑了我之前的消息。我的项目是基于GTK+3。谢谢你的回答。我现在就试一下。我不知道是否还有更优雅的方式存在,这一种对我很有效。谢谢(你不是指范围而不是xrange吗?)