我的目标是在其中一项处于活动状态时销毁组合框。
我写了这个测试代码:
import pygtk
pygtk.require('2.0')
import gtk
import gobject
def remove(combobox):
if 'OptionC' in combobox.get_active_text():
combobox.destroy()
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_default_size(800, 600)
window.set_title("Test")
window.connect("destroy", gtk.main_quit)
main_box = gtk.VBox(False, 2)
window.add(main_box)
nb = 3
for i in range(nb):
liststore = gtk.ListStore(gobject.TYPE_STRING)
combo = gtk.ComboBox(liststore)
cell = gtk.CellRendererText()
combo.pack_start(cell, True)
combo.add_attribute(cell, 'text', 0)
for text in ["OptionA-%d"%(i+1), "OptionB-%d"%(i+1), "OptionC-%d"%(i+1)]:
combo.append_text(text)
combo.set_active(0)
combo.connect("changed", remove)
main_box.pack_start(combo, expand=False)
window.show_all()
gtk.main()
如果我打开组合框的弹出窗口并单击选择“OptionC”,我会收到以下消息:
combo.py:29: Warning: invalid unclassed pointer in cast to `GObject' gtk.main()
combo.py:29: Warning: g_object_notify: assertion `G_IS_OBJECT (object)' failed gtk.main()
combo.py:29: Warning: g_object_set: assertion `G_IS_OBJECT (object)' failed gtk.main()
但是,如果我选择“OptionC”只是滚动组合框(不打开弹出窗口),则不会遇到错误。
谢谢你的建议!
答案:(适用于 pygtk 版本 2.24,但不适用于 2.16)
替换这个块:
liststore = gtk.ListStore(gobject.TYPE_STRING)
combo = gtk.ComboBox(liststore)
cell = gtk.CellRendererText()
combo.pack_start(cell, True)
combo.add_attribute(cell, 'text', 0)
通过这个函数:
combo = gtk.combo_box_new_text()