PyGObject与ComboBoxEntry的问题

时间:2014-06-14 22:49:10

标签: python gtk glade pygobject

我遇到了ComboBoxEntry的问题以及填充它的功能。

这是GUI上的__init__代码。

self.combobox_category = self.builder.get_object("combobox_category")
self.combobox_category.set_entry_text_column(1)
INIT_COMBOBOX_category(self)

这是填充ComboBoxEntry的功能。

def INIT_COMBOBOX_category(self):

    self.list_category = Gtk.ListStore(int,str)
    self.list_category.clear()

    self.list_category.append([0,"< List all the categories >"])
    self.list_category.append([1,"No specified"])

    #...No relevant code...

    self.combobox_category.set_model(self.list_category)
    self.cell = Gtk.CellRendererText()
    self.combobox_category.pack_start(self.cell, True)
    self.combobox_category.add_attribute(self.cell, 'text', 1)
    self.combobox_category.set_active(1)

问题在于,当我启动GUI时,combobox_category具有&#34;重复的值&#34; (仅在选择值时,不在ComboBoxEntry中):

< List all the categories > < List all the categories >
No specified                No specified

然后,当我需要再次使用函数INIT_COMBOBOX_category(self)时,值会增加三倍等。

我认为

self.list_category.clear()

无效。

同样奇怪的是,在Glade中,我选择了ComboBoxEntry作为可编辑的&#34;我不能写上它。我也试过&#34;覆盖模式&#34;它还没有用!

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,它包括在python而不是glade中创建ComboBoxEntry,在 init 函数中创建ComboBoxEntry,在INIT_COMBOBOX_category中修改ListStore。

init 代码如下:

self.list_category=Gtk.ListStore(int,str)
self.category_combo=Gtk.ComboBox.new_with_model_and_entry(self.list_category)
self.category_combo.show()
self.box_category_to_install.add(self.category_combo)
self.category_combo.set_entry_text_column(1)
INIT_COMBOBOX_category(self)

(我在林间空地添加了一个方框,名为box_category_to_install以放置ComboBoxEntry)

def INIT_COMBOBOX_category(self):

    self.list_category.clear()
    self.list_category.append([0,"< List all the categories >"])
    self.list_category.append([1,"No specified"])
    etc...