Нужен пример/помощь с сериализацией/десериализацией GtkTextBuffer (из GtkTextView)

Я пытаюсь сохранить теги пользователя жирным шрифтом/курсивом/шрифтом/и т. д. в GtkTextView. Использование GtkTextBuffer.get_text() не возвращает теги.

Лучшая документация, которую я нашел по этому поводу: http://www.pygtk.org/docs/pygtk/class-gtktextbuffer.html#method-gtktextbuffer--register-serialize-format

Однако я не понимаю аргументы функции. Было бы очень удобно иметь пример того, как они используются для сохранения/загрузки текстового представления с тегами в нем.

Изменить: я хотел бы уточнить, чего я пытаюсь достичь. В основном я хочу сохранить/загрузить текстовые + теги textview. У меня нет желания делать что-то более сложное, чем это. Я использую pickle в качестве формата файла, поэтому мне не нужна помощь в том, как его сохранить или в каком формате. Просто нужен способ вытягивать/проталкивать данные, чтобы пользователь ничего не терял из того, что он/она видит на экране. Спасибо.


person user129975    schedule 11.12.2009    source источник


Ответы (2)


Если вам нужно сохранить теги, потому что вы просто хотите скопировать текст в другой текстовый буфер, вы можете использовать gtk.TextBuffer.insert_range().

Если вам нужно сохранить текст с тегами в другой формат, читаемый другими программами, я однажды написал библиотеку с сериализатором текстового буфера GTK в RTF и обратно. Однако у него нет привязок к Python. Но в любом случае код является хорошим примером того, как использовать сериализатор. Ссылка: Osxcart

person ptomato    schedule 14.12.2009
comment
Меня в первую очередь интересует сохранение/загрузка текстовых + тегов пользователей. Я использую pickle в качестве формата файла. См. Launchpad.net/kabikaboo - person user129975; 14.12.2009

Я не работал с сериализацией GtkTextBuffer. Читая документацию, которую вы связали, я бы предложил попробовать сериализатор по умолчанию, позвонив

textbuffer.register_serialize_tagset()

Это дает вам встроенный проприетарный сериализатор GTK+. Проприетарность здесь означает, что он не сериализуется в какой-то общеизвестный формат; но если все, что вам нужно, это возможность сохранить содержимое текстового буфера и загрузить его обратно, это должно быть хорошо.

Конечно, исходный код доступен внутри GTK+, если вы действительно хотите понять, как он работает; Я бы рекомендовал не пытаться реализовать, например. хотя автономный десериализатор, поскольку GTK+, вероятно, не дает никаких гарантий, что формат останется как есть.

person unwind    schedule 14.12.2009
comment
Спасибо за эту информацию. Я все еще немного смущен. Буду ли я вызывать эту функцию один раз? Затем я должен вызвать что-то еще, чтобы получить данные, и что мне вызвать, чтобы вернуть данные в TextView? то есть: textview.register_serialize_target(), данные = textview.get_serialized_data(), textview.set_serialized_data(данные) - person user129975; 14.12.2009