сохранить данные в wxRichTextCtrl - PullRequest
1 голос
/ 15 марта 2010

Я нашел только два метода (SaveFile, LoadFile), которые сохраняются в файл. Как я могу использовать wxRichTextCtrl для сохранения данных XML непосредственно в переменной?

1 Ответ

1 голос
/ 19 марта 2010

Вы можете использовать control.GetBuffer () для получения RichTextBuffer и использовать RichTextXMLHandler для сохранения буфера в поток, который может быть объектом любого типа файла, например, Например, StringIO если rt - ваш расширенный текстовый элемент управления

import cStringIO
buf = cStringIO.StringIO()
handler = wx.richtext.RichTextXMLHandler()
handler.SetFlags(wx.richtext.RICHTEXT_HANDLER_INCLUDE_STYLESHEET)
handler.SaveStream(rt.GetBuffer(), buf)
print buf.getvalue()

Вот полный пример, который вы можете запустить и увидеть, как он печатает xml, когда вы щелкаете вне расширенного текста cntrl в рамке

import wx
import wx.richtext

app = wx.App(False)
f=wx.Frame(None, title="Test")
f.Show()
rt = wx.richtext.RichTextCtrl(f, size=(200,200))
def onEvent(evt):
    import cStringIO
    buf = cStringIO.StringIO()
    handler = wx.richtext.RichTextXMLHandler()
    handler.SetFlags(wx.richtext.RICHTEXT_HANDLER_INCLUDE_STYLESHEET)
    handler.SaveStream(rt.GetBuffer(), buf)
    print buf.getvalue()

f.Bind(wx.EVT_LEFT_DOWN, onEvent)
app.MainLoop()

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<richtext version="1.0.0.0" xmlns="http://www.wxwidgets.org">
  <paragraphlayout textcolor="#101010" fontsize="10" fontstyle="90" fontweight="90" fontunderlined="0" fontface="Sans" alignment="1" parspacingafter="10" parspacingbefore="0" linespacing="10">
    <paragraph>
      <text>sdsa</text>
    </paragraph>
  </paragraphlayout>
</richtext>
...