Python GUI Variable

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BlackJack

@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.
andip
User
Beiträge: 11
Registriert: Donnerstag 2. Januar 2014, 11:42
Wohnort: Westerwald

Hi BlackJack,
ich bin jetzt ein paar Tage nicht dazu gekommen hier weiter zu arbeiten.
Natürlich habe ich Deine Anregungen ins Progi eingebaut.
Und natürlich läuft das!
Durch Deine Hilfe ist mein Programm wohl tatsächlich ein wenig stabiler und professioneller geworden.
Ich Danke Dir dafür!!!

Ohne Deine Hilfe und die der anderen Nutzer hätte ich wahrscheinlich noch ein paar Monate rumprobiert ohne wirklich etwas zu erreichen...


DANKE!!!

Ich mache jetzt mal weiter und würde das Programm dann gerne nochmals zur Diskussion stellen.
LG aus dem wunderschönen Westerwald

Andip
Antworten