Wxpython 从字符串加载XRC

Wxpython 从字符串加载XRC,wxpython,Wxpython,我想从一些外部数据源动态创建GUI。源将显示其内部结构,例如字段,包括数据类型、初始值、最小-最大值等,以及(远程)数据对象可以处理的一些操作。结构应转换为文本控件和按钮,这些控件和按钮应在GUI中动态添加和删除。 这非常类似于使用XRC加载GUI的一部分,所以我想知道是否应该使用XRC或自己编写代码。使用XRC将使测试和使用替代数据源更加容易。生成XRC相当容易。现在我有两个问题: 除了这个想法还有别的选择吗 我找不到从字符串加载XRC的方法,因为XRC.XmlResource仅将文件名作为其

我想从一些外部数据源动态创建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字符串。如何消除这个错误?