需要GtkTextBuffer(GtkTextView)的序列化/反序列化示例/帮助
我想在GtkTextView中保存用户的加粗、斜体、字体等标签。使用GtkTextBuffer.get_text()这个方法并不能返回这些标签。
我找到的最好文档是这个:http://www.pygtk.org/docs/pygtk/class-gtktextbuffer.html#method-gtktextbuffer--register-serialize-format
不过,我对这个函数的参数不太理解。如果能有个例子,说明如何使用这些参数来保存和加载带标签的文本框,那就太好了。
编辑:我想澄清一下我的目标。基本上,我想保存和加载文本框中的文本和标签。我不想做比这更复杂的事情。我使用pickle作为文件格式,所以在如何保存或格式方面我不需要帮助。只需要一种方法来提取和推送数据,这样用户在屏幕上看到的内容就不会丢失。谢谢。
2 个回答
我没有使用过GtkTextBuffer的序列化功能。根据你提供的文档,我建议你可以试试默认的序列化方法,方法是调用
textbuffer.register_serialize_tagset()
这样做会使用GTK+自带的专有序列化器。这里的“专有”意思是它不会把内容保存成一些大家都熟悉的格式;不过如果你只是想保存文本缓冲区的内容并且能再加载回来,这样就足够了。
当然,如果你真的想了解它是怎么工作的,GTK+的源代码是可以查看的;不过我不建议你尝试自己实现一个独立的反序列化器,因为GTK+可能并没有保证这个格式会一直保持不变。
如果你需要保存标签,因为你只是想把文本复制到另一个文本区域,可以使用 gtk.TextBuffer.insert_range()
。
如果你想把带标签的文本保存成其他程序可以读取的格式,我之前写过一个库,可以把GTK文本缓冲区转换成RTF格式和从RTF格式转换回来。不过这个库没有Python的接口。不过无论如何,这段代码是一个很好的示例,展示了如何使用序列化功能。链接在这里:Osxcart