1

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

4

1 回答 1

1

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

  • RichTextPlainTextHandler
  • 富文本HTML处理程序
  • 富文本XML处理程序

例如:

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特定格式获取 a 的内容:

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()
于 2012-12-24T21:32:51.570 回答