Wxpython 从字符串加载XRC
我想从一些外部数据源动态创建GUI。源将显示其内部结构,例如字段,包括数据类型、初始值、最小-最大值等,以及(远程)数据对象可以处理的一些操作。结构应转换为文本控件和按钮,这些控件和按钮应在GUI中动态添加和删除。 这非常类似于使用XRC加载GUI的一部分,所以我想知道是否应该使用XRC或自己编写代码。使用XRC将使测试和使用替代数据源更加容易。生成XRC相当容易。现在我有两个问题:Wxpython 从字符串加载XRC,wxpython,Wxpython,我想从一些外部数据源动态创建GUI。源将显示其内部结构,例如字段,包括数据类型、初始值、最小-最大值等,以及(远程)数据对象可以处理的一些操作。结构应转换为文本控件和按钮,这些控件和按钮应在GUI中动态添加和删除。 这非常类似于使用XRC加载GUI的一部分,所以我想知道是否应该使用XRC或自己编写代码。使用XRC将使测试和使用替代数据源更加容易。生成XRC相当容易。现在我有两个问题: 除了这个想法还有别的选择吗 我找不到从字符串加载XRC的方法,因为XRC.XmlResource仅将文件名作为其
经过一点实验,XmlResource似乎需要一个文件或类似文件的对象。我不知道为什么你不能只使用一些文件,但是如果你想避免使用这些文件,那么你可以通过创建类似文件的对象来实现。请参见StringIO或您需要这样称呼它:
res = wx.xrc.EmptyXmlResource() #Here it is
res.LoadFromString(resourceText)
这里有一个例子
import wx, wx.xrc
resourceText = '''<?xml version="1.0" encoding="UTF-8"?>
<resource>
<object class="wxPanel" name="MyPanel">
<object class="wxStaticText">
<size>80,-1</size>
<label>Hey</label>
</object>
</object>
</resource>
'''
class TestFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, 'Testing',
size=(640,480))
res = wx.xrc.EmptyXmlResource() #Here it is
res.LoadFromString(resourceText)
panel = res.LoadPanel(self, "MyPanel")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(panel, 1, wx.EXPAND|wx.ALL, 5)
self.SetSizer(sizer)
self.SetAutoLayout(True)
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = TestFrame(None)
frame.Show(True)
app.MainLoop()
导入wx,wx.xrc
resourceText=''
80,-1
嘿
'''
类TestFrame(wx.Frame):
定义初始化(自身,父级):
wx.Frame.\uuuuuu init\uuuuuuuuux(self,parent,-1,‘Testing’,
大小=(640480))
res=wx.xrc.EmptyXmlResource()
res.LoadFromString(resourceText)
面板=res.LoadPanel(自“MyPanel”)
sizer=wx.BoxSizer(wx.VERTICAL)
sizer.Add(面板,1,wx.EXPAND | wx.ALL,5)
自整定器(施胶器)
self.SetAutoLayout(真)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=wx.PySimpleApp()
frame=TestFrame(无)
frame.Show(真)
app.MainLoop()
我确实找到了一种方法,用self.res=xrc.XmlResource(“”)加载字符串,然后执行self.res.LoadFromString(xrc)
。但是,这给出了一个错误2012-06-22 17:10:59.996 Python[12312:1107]CFURLCreateWithString被传递给了这个无效的URL字符串。如何消除这个错误?