WxRichTextCtrl python从文件中检索条目

时间:2012-12-24 17:41:46

标签: python

我正在创建一个带有树控件的程序,树中的每个项目都有一个显示在wxRichTextctrl中的数据。我想出了如何从ctrl获取xml数据,但我不知道如何在ctrl中显示它。就像我设置setvalue()时一样,它只是显示xml。从文件加载不是一个有效的选项,因为我有一个字典,我从中加载每个记录(存储在xml中)否则我将创建一个文件文件并加载它,这是一种令人毛骨悚然的。 如果您能帮我解决一些示例代码,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

要绕过RichTextCtrl.LoadFile(),您必须创建一个基于RichTextFileHandler的类,并使用其LoadStream()方法直接写入RichTextCtrl缓冲区。

  • RichTextPlainTextHandler
  • RichTextHTMLHandler
  • RichTextXMLHandler

例如:

from cStringIO import StringIO

# initialize a string stream with XML data
stream = StringIO( myXmlString )
# create an XML handler
handler = wx.richtext.RichTextXMLHandler()
# load the stream into the control's buffer
handler.LoadStream( myRichTextCtrl.GetBuffer(), stream )
# refresh the control
myRichTextCtrl.Refresh()

以特定格式获取RichTextCtrl的内容:

stream = StringIO()
handler = wx.richtext.RichTextHTMLHandler()
handler.SaveStream( myRichTextCtrl.GetBuffer(), stream )
print stream.getvalue()

或者,您可以直接通过缓冲区加载流。请注意,必须已存在适当的处理程序来解释数据:

# add the handler (where you create the control)
myRichTextCtrl.GetBuffer().AddHandler(wx.richtext.RichTextXMLHandler())
stream = StringIO( myXmlString )
buffer = self.myRichTextCtrl.GetBuffer()
# you have to specify the type of data to load and the control
# must already have an instance of the handler to parse it
buffer.LoadStream(stream, wx.richtext.RICHTEXT_TYPE_XML)
myRichTextCtrl.Refresh()