Я бы использовал StringIO
, чтобы записать данные, а затем распечатать их. Если вы делаете это так, то вы просто пишете в память, которая намного быстрее читается с этого диска. Я нашел example что сделал большую часть того, что вы хотели, но это было много лишнего хлама в нем, так что я сократил этот пример вниз к следующему:
import wx
import wx.richtext
from StringIO import StringIO
########################################################################
class MyFrame(wx.Frame):
#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, title='Richtext Test')
sizer = wx.BoxSizer(wx.VERTICAL)
self.rt = wx.richtext.RichTextCtrl(self)
self.rt.SetMinSize((300,200))
save_button = wx.Button(self, label="Save")
save_button.Bind(wx.EVT_BUTTON, self.on_save)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.rt, 1, wx.EXPAND|wx.ALL, 6)
sizer.Add(save_button, 0, wx.EXPAND|wx.ALL, 6)
self.SetSizer(sizer)
self.Show()
#----------------------------------------------------------------------
def on_save(self, event):
out = StringIO()
handler = wx.richtext.RichTextXMLHandler()
rt_buffer = self.rt.GetBuffer()
handler.SaveStream(rt_buffer, out)
out.seek(0)
self.xml_content = out.read()
print self.xml_content
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
UPDATE - Просто для удовольствия, я решил расширить этот пример, сделав его записать XML в файл, а затем прочитать его обратно и разобрать все, что текст был введен:
import wx
import wx.richtext
from lxml import objectify
from StringIO import StringIO
########################################################################
class MyFrame(wx.Frame):
#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, title='Richtext Test')
sizer = wx.BoxSizer(wx.VERTICAL)
self.rt = wx.richtext.RichTextCtrl(self)
self.rt.SetMinSize((300,200))
save_button = wx.Button(self, label="Save")
save_button.Bind(wx.EVT_BUTTON, self.on_save)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.rt, 1, wx.EXPAND|wx.ALL, 6)
sizer.Add(save_button, 0, wx.EXPAND|wx.ALL, 6)
self.SetSizer(sizer)
self.Show()
def on_save(self, event):
out = StringIO()
handler = wx.richtext.RichTextXMLHandler()
rt_buffer = self.rt.GetBuffer()
handler.SaveStream(rt_buffer, out)
out.seek(0)
self.xml_content = out.read()
print self.xml_content
with open("test.xml", "w") as xml_file:
xml_file.write(self.xml_content)
self.parse_xml()
def parse_xml(self):
'''
Parse the XML with the lxml module
'''
with open("test.xml") as xml_file:
xml = xml_file.read()
root = objectify.fromstring(xml)
print root.paragraphlayout.paragraph.getchildren()[0]
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
Обратите внимание, что модуль LXML не является частью Python, но может быть легко усваиваются here
Вот некоторые примеры XML я получил, когда я запустил эту программу:
<?xml version="1.0" encoding="UTF-8"?>
<richtext version="1.0.0.0" xmlns="http://www.wxwidgets.org">
<paragraphlayout textcolor="#3C3C3C" fontsize="10" fontstyle="90" fontweight="90" fontunderlined="0" fontface="Droid Sans" alignment="1" parspacingafter="10" parspacingbefore="0" linespacing="10">
<paragraph>
<text>glgfh</text>
</paragraph>
</paragraphlayout>
</richtext>
Не могли бы вы включить вывод XML? Вы также можете поставить это в свой вопрос, так как это не совсем ответ. –
Я полагаю, что другой вопрос: что вы читаете с ним? –
Xml version = "1.0" encoding = "UTF-8"?> sdgfasdgf paragraphlayout> –
Psionman