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:
gui.py
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?
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?