Archief - [Python] wxPython object benaderen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

i386dx

Legacy Member
Ik ben wat aan het spelen met Python icm wxPython.
Hierbij heb ik twee bestandjes:
- eentje waarin de GUI beschreven wordt
- en de hoofdroutine met de echte code

Ik wil dit gescheiden houden voor de duidelijkheid / leesbaarheid van de code

Klein voorbeeldprogje (button en label op een frame, waarde label wijzigen bij klik op knop):

Main:
Code:
import wx
import gui

class TestApp(wx.App):
    def OnInit(self):
        self.main = gui.create(None)
        self.main.Show()
        self.SetTopWindow(self.main)
        return True

def main():
    application = TestApp(0)
    application.MainLoop()

if __name__ == '__main__':
    main()

def OnButton1Click(event):
    gui.Frame1.Label1.Label = 'zever'

gui.py
Code:
import wx
import main

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1LABEL1, wxID_FRAME1PANEL1, 
] = [wx.NewId() for _init_ctrls in range(4)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(239, 326), size=wx.Size(414, 266),
              style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
        self.SetClientSize(wx.Size(406, 239))

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(406, 239),
              style=wx.TAB_TRAVERSAL)

        self.Label1 = wx.StaticText(id=wxID_FRAME1LABEL1, label='Label1',
              name='Label1', parent=self.panel1, pos=wx.Point(152, 56),
              size=wx.Size(31, 13), style=0)

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='button1',
              name='button1', parent=self.panel1, pos=wx.Point(136, 104),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, main.OnButton1Click,
              id=wxID_FRAME1BUTTON1)

    def __init__(self, parent):
        self._init_ctrls(parent)


Dit werkt naar behoren, als ik op de knop druk wordt de code uitgevoerd, maar ik slaag er niet in om de labeltekst te wijzigen. Of hoe kan ik de properties van een label (of gelijk wat) benaderen vanuit een andere file?
Als ik alles in één bestand hou kan dit wel (self.label.....)

In het probeersel van dit voorbeeld krijg ik de foutmelding "AttributeError: type object 'Frame1' has no attribute 'Label1'"
Heb al verschillende varianten hierop geprobeerd, maar niets lijkt te werken. Iemand een idee hoe dit nu juist wél moet?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan