Estoy tratando de mantener en ListStore los objetos que no son de texto usando el fragmento que encontré. Estos son los objetos:
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
Y ahora estoy tratando de hacer que TreeView lo muestre:
... 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) ...
Pero falla con errores:
GtkWarning: gtk_tree_view_column_cell_layout_set_cell_data_func: asertion
info != NULL' failed
error
col.set_cell_data_func(cell, get_series_title) Warning: unable to set propertyinfo != NULL' failed
col.set_cell_data_func(cell, get_series_title) Warning: unable to set propertyinfo != NULL' failed
texto de
col.set_cell_data_func(cell, get_series_title) Warning: unable to set propertyinfo != NULL' failed
‘de tipo
col.set_cell_data_func(cell, get_series_title) Warning: unable to set propertygchararray' from value of type
datos + TrayIcon + Series ‘
window.show_all () Advertencia: no se puede establecer eltext' of type
propiedadtext' of type
gchararray’ a partir del valor del tipo `data + TrayIcon + Series ‘
gtk.main () gtk.main ()
¿Qué debo hacer para que funcione?
Dos errores en el segundo a último bloque.
GtkWarning: gtk_tree_view_column_cell_layout_set_cell_data_func: aserción `info! = NULL ‘
En inglés, esto significa que el procesador de celdas no se encuentra en la lista de procesadores de celdas de la columna. set_cell_data_func
agregar el procesador de celdas a la columna antes de llamar a set_cell_data_func
.
Advertencia: no se puede establecer la propiedad ‘texto’ de tipo `gchararray ‘a partir del valor de` typedata + TrayIcon + Series’
Esto se debe a que la línea add_attribute
hace que GTK + intente configurar el texto de la celda en un objeto Serie, que por supuesto falla. Sólo quita esa línea; La función de datos de celda ya se encarga de configurar el texto de la celda.
En codigo:
col = gtk.TreeViewColumn(_("Series title")) cell = gtk.CellRendererText() col.pack_start(cell) col.set_cell_data_func(cell, get_series_title)