Seite 1 von 1

wxformbuilder-code nutzen

Verfasst: Samstag 3. Mai 2008, 15:46
von sechsrad
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()

Verfasst: Samstag 3. Mai 2008, 19:36
von apollo13
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.