#python #python-3.x #gtk3 #pygtk #pygobject
#python #python-3.x #gtk3 #pygtk #pygobject
Вопрос:
У меня есть размер файла в байтах, хранящийся в Gtk.ListStore
, и я хочу, чтобы они отображались в удобочитаемом формате с помощью Gtk.CellRendererText
. Читая документацию, кажется, что Gtk.TreeViewColumn.set_cell_data_func()
это способ добиться этого. Его настройка работает без ошибок, но как только требуется отобразить ячейку, все приложение вылетает после нескольких неудачных утверждений.
Это код, который я использую:
self._builder.get_object("ContentList.Size").set_cell_data_func(
Gtk.CellRendererText(),
self.render_formatted_size
)
И это то, что печатается в stderr:
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_freeze_notify: assertion 'G_IS_OBJECT (object)' failed
return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_get: assertion 'G_IS_OBJECT (object)' failed
return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_set: assertion 'G_IS_OBJECT (object)' failed
return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_is_floating: assertion 'G_IS_OBJECT (object)' failed
return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_get_qdata: assertion 'G_IS_OBJECT (object)' failed
return Gio.Application.run(self, *args, **kwargs)
Содержимое self.render_formatted_size
здесь не должно иметь значения. Похоже, что это никогда не выполняется.
PS: Добавление дополнительных столбцов string в модель не является вариантом, так как я хочу иметь возможность изменять единицы отображения (SI, IEC) в любое время.
Ответ №1:
Вы передаете недавно созданный CellRenderer, а не существующий. Вместо этого следует сделать что-то вроде этого:
rend = Gtk.CellRendererText()
column = Gtk.TreeViewColumn("title", rend)
column.set_cell_data_func (rend, cell_fn, None);
tree.append_column(column)
Комментарии:
1. Спасибо, чувак, это было полезно. Дело не в том, что я не создавал экземпляр. Как вы можете видеть, в моем коде есть
()
послеGtk.CellRendererText
. Но, размышляя о приведенных вами аргументахGtk.TreeViewColumn()
, я заметил, что не прикрепил средство визуализации к столбцу, которое я получил отGtk.Builder
. Итак, теперь, после присоединения его с помощью вызоваcolumn.pack_start(rend)
, это работает.