我正在创建一个带有树控件的程序,树中的每个项目都有一个显示在wxRichTextctrl中的数据。我想出了如何从ctrl获取xml数据,但我不知道如何在ctrl中显示它。就像我设置setvalue()时一样,它只是显示xml。从文件加载不是一个有效的选项,因为我有一个字典,我从中加载每个记录(存储在xml中)否则我将创建一个文件文件并加载它,这是一种令人毛骨悚然的。 如果您能帮我解决一些示例代码,我将不胜感激。
答案 0 :(得分:1)
要绕过RichTextCtrl.LoadFile()
,您必须创建一个基于RichTextFileHandler
的类,并使用其LoadStream()
方法直接写入RichTextCtrl缓冲区。
例如:
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()