Problema ao serializar o TextBuffer

0

Ao tentar seguir as instruções de serialização de esta resposta , encontrei alguns problemas.

O seguinte deve serializar o conteúdo de uma TextArea para uma string. As duas primeiras linhas estão completas, mas tenho problemas a partir de então.

page_content = subject_content.get_nth_page(pn) //TextArea widget returned
page_name = subject_content.get_tab_label(page_content).get_text()
c_buffer = page_content.get_buffer()
c_format = c_buffer.register_serialize_tagset()
serial = c_buffer.serialize(c_format, c_buffer.get_start_iter(), c_buffer.get_end_iter())

O primeiro erro que recebo é:

Traceback (most recent call last):
  File "/home/nja/notetaker/notetaker/NotetakerWindow.py", line 251, in on_btn_save_clicked
    self.save()
  File "/home/nja/notetaker/notetaker/NotetakerWindow.py", line 160, in save
    c_format = c_buffer.register_serialize_tagset()
  File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function
    return info.invoke(*args, **kwargs)
TypeError: register_serialize_tagset() takes exactly 2 arguments (1 given)

Ao inserir None como um parâmetro para c_format = c_buffer.register_serialize_tagset() que a linha completa, no entanto, a próxima não funciona:

Traceback (most recent call last):
  File "/home/nja/notetaker/notetaker/NotetakerWindow.py", line 251, in on_btn_save_clicked
    self.save()
  File "/home/nja/notetaker/notetaker/NotetakerWindow.py", line 161, in save
    serial = c_buffer.serialize(c_format, c_buffer.get_start_iter(), c_buffer.get_end_iter())
  File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function
    return info.invoke(*args, **kwargs)
TypeError: serialize() takes exactly 5 arguments (4 given)

Eu não tenho idéia de uma solução alternativa para isso, no entanto, eu não deveria ter que preencher None nessa outra função em primeiro lugar.

O que está acontecendo aqui?

    
por njallam 01.09.2012 / 21:53

1 resposta

0

Os documentos Gtk dizem que c_buffer.register_serialize_tagset () precisa de um utf8 string como argumento.

Parece que você precisa:
c_buffer.register_serialize_tagset(c_buffer.get_text().encode('utf-8'))
ou similar

Isso funciona:

from gi.repository import Gtk

win = Gtk.Window()
box = Gtk.Box()
win.add(box)

text = Gtk.TextView()
box.add(text)

buffer = text.get_buffer()

buffer.set_text("Sample text")

this = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), False)

format = buffer.register_serialize_tagset(this)

data = buffer.serialize(buffer, format, buffer.get_start_iter(), buffer.get_end_iter())

print data

Gtk.main()
    
por RobotHumans 01.09.2012 / 22:49