XRC und nicht graphische widgets

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Hi,

Nachdem ich mich endlich ueberwinden konnte, mich mit XRC (und XRCed) auseinander zu setzen ist alles wunderbar und toll und ich verstehe alles.

Essentiell lagert man den grafischen Teil aus, damit man leichter den Teil lesen kann, der die Logik beherbergt. Um das ganze fuer mich im Kopf gescheit abzuschliessen und nicht ohne es zu wollen eine kleinigkeit falsch mache, wollte ich euch mal fragen wie das mit den widgets ist, die man nicht sieht (z.B. wx.Timer).

Kann/sollten die auch in die XRC file rein? Ich bin der Meinung nein und es wuerde fuer mich keinen Sinn ergeben (Ausserdem geht das mit XRCed sowieso nicht, soweit ich weiss), aber da ich kein Fachmann bin wuerde ich mich gerne belehren lassen.

sorry, falls das eine bloede Frage ist, aber ich dachte mir ich geh mal lieber auf nummer sicher ;)

Thanks
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Hmmm... schade, hat also keiner hier Erfahrung mit XRC.

Falls jemand seine Meinung kundtun moechte bzw "an educated guess", dann ist das auch willkommen. Ein Rat von einem erfahreneren Programmierer ist mir lieber als gar keiner :mrgreen:
BlackJack

@Nebelhom: Mir waren die Informationen zu XRC ein wenig zu dünn und ich hatte den Eindruck, dass man am Ende die Widget-Hierarchie doch noch mal halb in Python-Code ausdrücken muss, weil man sich nicht einfach zum Beispiel nur ein Eingabewidget holen kann, sondern auch das Containerwidget benötigt, wo das drin steckt.
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Stichwort: Widget-hierarchie: Bin mir nicht sicher, was du meinst. Vielleicht sowas wie in dem Beispiel code von der website? (von wegen erst self.frame, dann self.panel und jetzt erst kann man self.text ansprechen)

Code: Alles auswählen

    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()
Eigentlich ist das beispiel von der website etwas doof, weil direkt danach erwaehnt wird dass man self.panel getrost weglassen kann und einfach self.frame benutzen kann.
Note: It is not necessary to get an explicit reference to the Panel. When getting references to the Textboxes, you can simply use self.frame as the parent argument. XRCCTRL uses the FindWindowById method, which is recursive, and therefore will automatically find the Panel as the parent of the widgets even if self.frame is used.

Bis jetzt ist XRC fuer mich angenehm, weil der gesamte Sizer Ueberhang mit seinem gesamten Rattenschwanz ausgelagert ist (Der war im code wirklich sehr unuebersichtlich bei mir). Ich hatte bei fuer mich groesseren GUIs (also von wirklich komplexen Sachen Lichtjahre entfernt) schnell das Gefuehl, dass ich den Ueberblick verliere. Ob das jetzt an meinem unsauberen Programmierstil liegt oder nicht, sei mal dahin gestellt. Fakt ist, dass "bis jetzt" eine Menge code wegfaellt und ich mich nur, um die Bindings und die Logik kuemmern muss. Also wie gesagt "bis jetzt" tut es das, was auf der Verpackung steht.

Ich werde das auf jeden Fall einmal im Auge behalten und wenn ich etwas mehr Uebung mit XRC files habe nochmal bewerten.

Danke auf jeden Fall.
Antworten