我试图使用我找到的代码段保留ListStore非文本对象。这些是对象:
class Series(gobject.GObject, object):
def __init__(self, title):
super(Series, self).__init__()
self.title = title
gobject.type_register(Series)
class SeriesListStore(gtk.ListStore):
def __init__(self):
super(SeriesListStore, self).__init__(Series)
self._col_types = [Series]
def get_n_columns(self):
return len(self._col_types)
def get_column_type(self, index):
return self._col_types[index]
def get_value(self, iter, column):
obj = gtk.ListStore.get_value(self, iter, 0)
return obj
现在我正在尝试让TreeView显示它:
...
liststore = SeriesListStore()
liststore.clear()
for title in full_conf['featuring']:
series = Series(title)
liststore.append([series])
def get_series_title(column, cell, model, iter):
cell.set_property('text', liststore.get_value(iter, column).title)
return
selected = builder.get_object("trvMain")
selected.set_model(liststore)
col = gtk.TreeViewColumn(_("Series title"))
cell = gtk.CellRendererText()
col.set_cell_data_func(cell, get_series_title)
col.pack_start(cell)
col.add_attribute(cell, "text", 0)
selected.append_column(col)
...
但它失败了:
GtkWarning: gtk_tree_view_column_cell_layout_set_cell_data_func: 断言
info != NULL' failed
文字' 类型
col.set_cell_data_func(cell, get_series_title) Warning: unable to set propertygchararray' from value of type
数据+ TrayIcon + Series'的类型 window.show_all() 警告:无法从值中设置属性text' of type
gchararray' 输入`data + TrayIcon + Series'
gtk.main()gtk.main()
我该怎么做才能让它发挥作用?
答案 0 :(得分:2)
倒数第二块的两个错误。
GtkWarning:gtk_tree_view_column_cell_layout_set_cell_data_func:断言`info!= NULL'
在英语中,这意味着单元格渲染器不在列的单元格渲染器列表中。在调用set_cell_data_func
之前,您需要先将单元格渲染器添加到列中。
警告:无法从`typedata + TrayIcon + Series'的值设置`gchararray'类型的属性`text'
这是因为add_attribute
行导致GTK +尝试将单元格文本设置为Series对象,当然这会失败。只需删除该行;单元格数据func已经负责设置单元格文本。
在代码中:
col = gtk.TreeViewColumn(_("Series title"))
cell = gtk.CellRendererText()
col.pack_start(cell)
col.set_cell_data_func(cell, get_series_title)