@andip: Gemeint war das hier:
Code: Alles auswählen
def main():
app = wx.App(False)
frame = wx.Frame(None, title='Heizung 0.9', size=(800, 600))
panel = ExamplePanel(frame)
frame.Show()
app.MainLoop()
if __name__ == '__main__':
main()
Und das geht nur wenn auf die nun lokalen Namen in `main()` nicht von irgendwo anders her zugegriffen wird. Was eigentlich auch nicht der Fall sein sollte, aber bei Dir in der `OnClose()` halt doch passiert:
Code: Alles auswählen
def OnClose(self, event):
self.timer.Stop()
frame.Destroy()
Die Methode bekommt das `frame`-Objekt nicht übergeben sondern baut einfach darauf das es so etwas ausserhalb der Klasse schon irgendwie geben wird. Das ist eine Abhängigkeit von der Umgebung die man eigentlich nicht haben möchte.
Da das Objekt das Eltern-Widget vom dem `Panel` ist auf dem die Methode definiert ist, kann man es von dort aber auch wieder abfragen:
Code: Alles auswählen
def OnClose(self, event):
self.timer.Stop()
self.GetParent().Destroy()
Und schon ist man nicht mehr von einem magischen `frame` abhängig. Man könnte jetzt sogar mehrere Heizungsfenster öffnen, wenn man das beispielsweise irgendwann mal zu einer Software ausbauen möchte mit der man nicht nur eine Anlage verwalten kann. Diese Vermeidung von globalem Zustand und die Möglichkeit der Wiederverwendung ist ja eine der Motivationen warum man Klassen erfunden hat.