wxformbuilder-code nutzen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

Samstag 3. Mai 2008, 15:46

wenn ich mit dem wxformbuilder dieses erstelle (xrc-datei):

Code: Alles auswählen

#design layout in a separate XML file
<?xml version="1.0" encoding="utf-8"?>
<resource>
  <object class="wxFrame" name="mainFrame">
    <title>My Frame</title>
    <object class="wxPanel" name="panel">
      <object class="wxFlexGridSizer">
        <cols>2</cols>
        <rows>3</rows>
        <vgap>5</vgap>
        <hgap>5</hgap>
        <object class="sizeritem">
          <object class="wxStaticText" name="label1">
            <label>First name:</label>
          </object>
        </object>
        <object class="sizeritem">
          <object class="wxTextCtrl" name="text1"/>
        </object>
        <object class="sizeritem">
          <object class="wxStaticText" name="label2">
            <label>Last name:</label>
          </object>
        </object>
        <object class="sizeritem">
          <object class="wxTextCtrl" name="text2"/>
        </object>
        <object class="spacer">
          <size>0,0</size>
        </object>
        <object class="sizeritem">
          <object class="wxButton" name="button">
            <label>Submit</label>
          </object>
        </object>
      </object>
    </object>
  </object>
</resource>
wie finde ich dann in wxpython dazu diese verbindung, muss man denn das vorherige guiprogramm (xrc) zerpflücken um die einzelnen
button anzusprechen bzw zu programmieren?

Code: Alles auswählen

#logic by itself in module
import wx
from wx import xrc
class MyApp(wx.App):
    def OnInit(self):
        self.res = xrc.XmlResource('gui.xrc')
        self.init_frame()
        return True
    def init_frame(self):
        self.frame = self.res.LoadFrame(None, 'mainFrame')
        self.panel = xrc.XRCCTRL(self.frame, 'panel')
        self.text1 = xrc.XRCCTRL(self.panel, 'text1')
        self.text2 = xrc.XRCCTRL(self.panel, 'text2')
        self.frame.Bind(wx.EVT_BUTTON, self.OnSubmit, id=xrc.XRCID('button'))
        self.frame.Show()
    def OnSubmit(self, evt):
        wx.MessageBox('Your name is %s %s!' %
            (self.text1.GetValue(), self.text2.GetValue()), 'Feedback')
if __name__ == '__main__':
    app = MyApp(False)
    app.MainLoop()
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Samstag 3. Mai 2008, 19:36

Siehe: http://www.zetcode.com/wxpython/xmlresource/

Du kannst natürlich auch ein Frame mit LoadFrame statt dem Panel laden. Im Prinzip ladest du nicht alles einzeln mit XRCCTRL, sondern erst wenn du es wirklich brauchst, was weitaus seltener ist. XRCID wird schon etwas öfter für events etc. verwendet.
Antworten