1

外部データ ソースから GUI を動的に作成したいと考えています。ソースは、データ型、初期値、最小最大値などを含むフィールドなどの内部構造と、(リモート) データ オブジェクトによって処理できるいくつかのアクションを提示します。構造は、GUI から動的に追加および削除する必要があるテキスト コントロールとボタンに変換する必要があります。XRC を使用して GUI の一部をロードするのと非常によく似ているため、XRC を使用するか、自分で何かをコーディングするかを考えていました。XRC を使用すると、テストと代替データ ソースの使用が容易になります。XRC の生成はかなり簡単です。そこで、次の 2 つの質問があります。

  1. この考えに代わるものはありますか?
  2. xrc.XmlResource はファイル名のみを引数として取るため、文字列から XRC をロードする方法が見つかりません。一時ファイルを使用するのは面倒なようですが、文字列からロードする方法はありますか?
4

2 に答える 2

0

少し実験した後、XmlResource にはファイルまたはファイルのようなオブジェクトが必要なようです。一部のファイルだけを使用できない理由はわかりませんが、それを避けたい場合は、ファイルのようなオブジェクトを作成することでできる場合があります。StringIO またはhttp://pypi.python.org/pypi/filelike/0.3.3/を参照してください

于 2012-06-22T14:26:58.903 に答える
0

次のように呼び出す必要があります。

        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()
于 2012-07-18T23:30:00.873 に答える