来自 RichTextCtrl 的文本
text from RichTextCtrl
我想将富文本控件中的 xml 字符串转换为字符串变量(以存储在数据库中)。我可以保存到文件,然后将其作为字符串读回,但必须有更好的方法(缓冲区?)。
我试过了
buffer = self.rtc.GetBuffer()
但是如何从缓冲区中获取字符串?
有人可以帮助我吗?我搜索了文档和示例,但找不到我需要的内容。
我会使用 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 parsing error: 'no element found' at line 1
我的密码是
def OnLstStrategyDClick(self,e):
index=e.GetSelection()
self.txtStrategyID.SetValue(self.StrategyList[index][0])
self.txtDescription.SetValue(self.StrategyList[index][1])
#print self.StrategyList[index][2]
out = StringIO()
handler = wx.richtext.RichTextXMLHandler()
buffer = self.txtBidStrategy.GetBuffer()
buffer.AddHandler(handler)
out.write(self.StrategyList[index][2])
out.seek(0)
handler.LoadStream(buffer, out)
self.txtBidStrategy.Refresh()
self.txtBidStrategy.SetValue(self.StrategyList[index][2])
xml代码看起来不错(好吧,它已经由处理程序生成)
我想将富文本控件中的 xml 字符串转换为字符串变量(以存储在数据库中)。我可以保存到文件,然后将其作为字符串读回,但必须有更好的方法(缓冲区?)。
我试过了
buffer = self.rtc.GetBuffer()
但是如何从缓冲区中获取字符串?
有人可以帮助我吗?我搜索了文档和示例,但找不到我需要的内容。
我会使用 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 parsing error: 'no element found' at line 1
我的密码是
def OnLstStrategyDClick(self,e):
index=e.GetSelection()
self.txtStrategyID.SetValue(self.StrategyList[index][0])
self.txtDescription.SetValue(self.StrategyList[index][1])
#print self.StrategyList[index][2]
out = StringIO()
handler = wx.richtext.RichTextXMLHandler()
buffer = self.txtBidStrategy.GetBuffer()
buffer.AddHandler(handler)
out.write(self.StrategyList[index][2])
out.seek(0)
handler.LoadStream(buffer, out)
self.txtBidStrategy.Refresh()
self.txtBidStrategy.SetValue(self.StrategyList[index][2])
xml代码看起来不错(好吧,它已经由处理程序生成)