ich arbeite seit den letzten Schulstunden an einer Ampelkreuzung.
Ich habe 3 Klassen und ein "Hauptprogramm".
ampel.py ist die Klasse für die Autoampeln.
fu_ampel.py ist die Klasse für die Fußgängerampeln.
ampelmanager.py ist von meinem Lehrer vorgegeben, damit es einfacher ist die Amepln zu schalten.
Mein Problem:
Die Lampen werden nicht "aktualisiert" und wenn ich das Fenster schließe kommt bei mir der Fehler aus der Überschrift.
Er verweist auf Zeile 1193 und Zeile 1184 der "__init__.py" (config???) und auf einen Fehler im Hauptprogramm Zeile 230 ---> def Zeile 16. In meinem Kurs kann mir niemand inkl. Lehrer weiterhelfen :K
Das Hauptprogramm ist noch nicht perfekt und vor allem ziemlich umständlich geschrieben xD
Ich hoffe es kann mir hier jemand helfen
MfG
~eragon
ampel.py
Code: Alles auswählen
class Ampel(object):
__slots__ = ('zustand')
def __init__(self, anfangszustand):
# nachher:
# Ein Objekt der Klasse Ampel ist erzeugt.
# Der Wert des Attributs zustand wird auf den übergebenen
# Parameter gesetzt.
self.zustand = anfangszustand
def setZustand(self, z):
# vorher:
# Der Wert des Attributs zustand beschreibt eine Ampelphase.
# nachher:
# Dem Attribut zustand ist der Wert des übergebenen Parameters
# z zugewiesen.
self.zustand = z
def getZustand(self):
# Die Funktion ändert den Objektzustand nicht.
# Die Funktion liefert als Ergebnis den Wert von zustand zurück.
return self.zustand
def schalten(self):
# vorher:
# Der Wert des Attributs zustand beschreibt eine Ampelphase.
# nachher:
# Der Wert des Attributs zustand beschreibt die nächste Phase gemäß
# des üblichen Ampelzyklus "rot -> rotgelb > gruen -> gelb -> rot".
if self.zustand == 'rot':
self.zustand = 'rotgelb'
elif self.zustand == 'rotgelb':
self.zustand = 'gruen'
elif self.zustand == 'gruen':
self.zustand = 'gelb'
elif self.zustand == 'gelb':
self.zustand = 'rot'
def getLampen(self):
# Die Funktion ändert den Objektzustand nicht.
# Die Funktion liefert als Ergebnis ein Tripel aus Wahrheitswerten,
# die den zur Phase passenden Lampenzustand in der Reihenfolge
# (Lampe-rot, Lampe-gelb, Lampe-grün) beschreibt.
if self.zustand == 'rot':
lampen = (True, False, False)
elif self.zustand == 'rotgelb':
lampen = (True, True, False)
elif self.zustand == 'gruen':
lampen = (False, False, True)
elif self.zustand == 'gelb':
lampen = (False, True, False)
return lampen
Code: Alles auswählen
class F_Ampel(object):
__slots__ = ('zustand')
def __init__(self, anfangszustand):
# nachher:
# Ein Objekt der Klasse Ampel ist erzeugt.
# Der Wert des Attributs zustand wird auf den übergebenen
# Parameter gesetzt.
self.zustand = anfangszustand
def setZustand(self, z):
# vorher:
# Der Wert des Attributs zustand beschreibt eine Ampelphase.
# nachher:
# Dem Attribut zustand ist der Wert des übergebenen Parameters
# z zugewiesen.
self.zustand = z
def getZustand(self):
# Die Funktion ändert den Objektzustand nicht.
# Die Funktion liefert als Ergebnis den Wert von zustand zurück.
return self.zustand
def schalten(self):
# vorher:
# Der Wert des Attributs zustand beschreibt eine Ampelphase.
# nachher:
# Der Wert des Attributs zustand beschreibt die nächste Phase gemäß
# des üblichen Ampelzyklus "rot -> rotgelb > gruen -> gelb -> rot".
if self.zustand == 'rot':
self.zustand = 'rot2'
elif self.zustand == 'rot2':
self.zustand = 'gruen'
elif self.zustand == 'gruen':
self.zustand = 'gruen2'
elif self.zustand == 'gruen2':
self.zustand = 'rot'
def getLampen(self):
# Die Funktion ändert den Objektzustand nicht.
# Die Funktion liefert als Ergebnis ein Tripel aus Wahrheitswerten,
# die den zur Phase passenden Lampenzustand in der Reihenfolge
# (Lampe-rot, Lampe-gelb, Lampe-grün) beschreibt.
if self.zustand == 'rot':
lampen = (True, False)
elif self.zustand == 'rot2':
lampen = (True, False)
elif self.zustand == 'gruen':
lampen = (False, True)
elif self.zustand == 'gruen2':
lampen = (False, True)
return lampen
Code: Alles auswählen
#------------------------------------------------------------------------------
# Ampel
#------------------------------------------------------------------------------
from ampel import *
from f_ampel import *
#------------------------------------------------------------------------------
# Ampelmanager
#------------------------------------------------------------------------------
class AmpelManager(object):
def __init__(self):
self.ampel1 = None
self.ampel2 = None
self.ampel3 = None
self.ampel4 = None
self.f_ampel1 = None
self.f_ampel2 = None
self.f_ampel3 = None
self.f_ampel4 = None
def schalteAmpeln(self):
self.ampel1.schalten()
self.ampel2.schalten()
self.ampel3.schalten()
self.ampel4.schalten()
self.f_ampel1.schalten()
self.f_ampel2.schalten()
self.f_ampel3.schalten()
self.f_ampel4.schalten()
Code: Alles auswählen
##------------------------------------------------------------------------------
## Header
##------------------------------------------------------------------------------
from tkinter import *
from ampelmanager import *
from ampel import *
from f_ampel import *
##------------------------------------------------------------------------------
## Defs
##------------------------------------------------------------------------------
def anzeigeAktualisierenA1(lampeRot, lampeGelb, lampeGruen):
if lampeRotA1:
labelRotA1.config(background='red')
else:
labelRotA1.config(background='gray')
if lampeGelbA1:
labelGelbA1.config(background='yellow')
else:
labelGelbA1.config(background='gray')
if lampeGruenA1:
labelGruenA1.config(background='green')
else:
labelGruenA1.config(background='gray')
def anzeigeAktualisierenA2(lampeRot, lampeGelb, lampeGruen):
if lampeRotA2:
labelRotA2.config(background='red')
else:
labelRotA2.config(background='gray')
if lampeGelbA2:
labelGelbA2.config(background='yellow')
else:
labelGelbA2.config(background='gray')
if lampeGruenA2:
labelGruenA2.config(background='green')
else:
labelGruenA2.config(background='gray')
def anzeigeAktualisierenA3(lampeRot, lampeGelb, lampeGruen):
if lampeRotA3:
labelRotA3.config(background='red')
else:
labelRotA3.config(background='gray')
if lampeGelbA3:
labelGelbA3.config(background='yellow')
else:
labelGelbA3.config(background='gray')
if lampeGruenA3:
labelGruenA3.config(background='green')
else:
labelGruenA3.config(background='gray')
def anzeigeAktualisierenA4(lampeRot, lampeGelb, lampeGruen):
if lampeRotA4:
labelRotA4.config(background='red')
else:
labelRotA4.config(background='gray')
if lampeGelbA4:
labelGelbA4.config(background='yellow')
else:
labelGelbA4.config(background='gray')
if lampeGruenA4:
labelGruenA4.config(background='green')
else:
labelGruenA4.config(background='gray')
def anzeigeAktualisierenFuA1(lampeRot, lampeGruen):
if lampeRotFuA1:
labelRotFuA1.config(background='red')
else:
labelRotFuA1.config(background='gray')
if lampeGruenFuA1:
labelGruenFuA1.config(background='green')
else:
labelGruenFuA1.config(background='gray')
def anzeigeAktualisierenFuA2(lampeRot, lampeGruen):
if lampeRotFuA2:
labelRotFuA2.config(background='red')
else:
labelRotFuA2.config(background='gray')
if lampeGruenFuA2:
labelGruenFuA2.config(background='green')
else:
labelGruenFuA2.config(background='gray')
def anzeigeAktualisierenFuA3(lampeRot, lampeGruen):
if lampeRotFuA3:
labelRotFuA3.config(background='red')
else:
labelRotFuA3.config(background='gray')
if lampeGruenFuA3:
labelGruenFuA3.config(background='green')
else:
labelGruenFuA3.config(background='gray')
def anzeigeAktualisierenFuA4(lampeRot, lampeGruen):
if lampeRotFuA4:
labelRotFuA4.config(background='red')
else:
labelRotFuA4.config(background='gray')
if lampeGruenFuA4:
labelGruenFuA4.config(background='green')
else:
labelGruenFuA4.config(background='gray')
##------------------------------------------------------------------------------
## GUI
##------------------------------------------------------------------------------
fenster = Tk()
fenster.title("Kreuzung")
fenster.geometry("500x500")
frameStraße = Frame(master=fenster, background = 'darkgray')
frameWiese1 = Frame(master=fenster, background = 'darkgreen')
frameWiese1.place(width=180, height =180)
frameWiese2 = Frame(master=fenster, background = 'darkgreen')
frameWiese2.place(x=320, width=180, height =180)
frameWiese3 = Frame(master=fenster, background = 'darkgreen')
frameWiese3.place(y=320, width=180, height =180)
frameWiese4 = Frame(master=fenster, background = 'darkgreen')
frameWiese4.place(x=320, y=320, width=180, height =180)
frameAmpel1 = Frame(master=frameWiese1, background = 'darkgray')
frameAmpel1.place(x=145, y=105, width=25, height =67)
frameAmpel2 = Frame(master=frameWiese2, background = 'darkgray')
frameAmpel2.place(x=10, y=145, width=67, height =25)
frameAmpel3 = Frame(master=frameWiese3, background = 'darkgray')
frameAmpel3.place(x=105, y=10, width=67, height =25)
frameAmpel4 = Frame(master=frameWiese4, background = 'darkgray')
frameAmpel4.place(x=10, y=10, width=25, height =67)
frameFuAmpel1 = Frame(master=frameWiese1, background = 'darkgray')
frameFuAmpel1.place(x=118, y=125, width=25, height =47)
frameFuAmpel2 = Frame(master=frameWiese2, background = 'darkgray')
frameFuAmpel2.place(x=10, y=118, width=47, height =25)
frameFuAmpel3 = Frame(master=frameWiese3, background = 'darkgray')
frameFuAmpel3.place(x=125, y=37, width=47, height =25)
frameFuAmpel4 = Frame(master=frameWiese4, background = 'darkgray')
frameFuAmpel4.place(x=37, y=10, width=25, height =47)
labelRotA1 = Label(master=frameAmpel1, background='gray')
labelRotA1.place(x=4, y=4, width=17, height=17)
labelGelbA1 = Label(master=frameAmpel1, background='gray')
labelGelbA1.place(x=4, y=25, width=17, height=17)
labelGruenA1 = Label(master=frameAmpel1, background='gray')
labelGruenA1.place(x=4, y=46, width=17, height=17)
labelRotA2 = Label(master=frameAmpel2, background='gray')
labelRotA2.place(x=4, y=4, width=17, height=17)
labelGelbA2 = Label(master=frameAmpel2, background='gray')
labelGelbA2.place(x=25, y=4, width=17, height=17)
labelGruenA2 = Label(master=frameAmpel2, background='gray')
labelGruenA2.place(x=46, y=4, width=17, height=17)
labelRotA3 = Label(master=frameAmpel3, background='gray')
labelRotA3.place(x=4, y=4, width=17, height=17)
labelGelbA3 = Label(master=frameAmpel3, background='gray')
labelGelbA3.place(x=25, y=4, width=17, height=17)
labelGruenA3 = Label(master=frameAmpel3, background='gray')
labelGruenA3.place(x=46, y=4, width=17, height=17)
labelRotA4 = Label(master=frameAmpel4, background='gray')
labelRotA4.place(x=4, y=4, width=17, height=17)
labelGelbA4 = Label(master=frameAmpel4, background='gray')
labelGelbA4.place(x=4, y=25, width=17, height=17)
labelGruenA4 = Label(master=frameAmpel4, background='gray')
labelGruenA4.place(x=4, y=46, width=17, height=17)
labelRotFuA1 = Label(master=frameFuAmpel1, background='gray')
labelRotFuA1.place(x=4, y=4, width=17, height=17)
labelGruenFuA1 = Label(master=frameFuAmpel1, background='gray')
labelGruenFuA1.place(x=4, y=25, width=17, height=17)
labelRotFuA2 = Label(master=frameFuAmpel2, background='gray')
labelRotFuA2.place(x=4, y=4, width=17, height=17)
labelGruenFuA2 = Label(master=frameFuAmpel2, background='gray')
labelGruenFuA2.place(x=25, y=4, width=17, height=17)
labelRotFuA3 = Label(master=frameFuAmpel3, background='gray')
labelRotFuA3.place(x=4, y=4, width=17, height=17)
labelGruenFuA3 = Label(master=frameFuAmpel3, background='gray')
labelGruenFuA3.place(x=25, y=4, width=17, height=17)
labelRotFuA4 = Label(master=frameFuAmpel4, background='gray')
labelRotFuA4.place(x=4, y=4, width=17, height=17)
labelGruenFuA4 = Label(master=frameFuAmpel4, background='gray')
labelGruenFuA4.place(x=4, y=25, width=17, height=17)
fenster.mainloop()
##------------------------------------------------------------------------------
## Code
##------------------------------------------------------------------------------
ampel1 = Ampel('rot')
ampel2 = Ampel('gruen')
ampel3 = Ampel('rot')
ampel4 = Ampel('gruen')
f_ampel1 = F_Ampel('gruen')
f_ampel2 = F_Ampel('rot')
f_ampel3 = F_Ampel('gruen')
f_ampel4 = F_Ampel('rot')
ampelmanager = AmpelManager()
ampelmanager.ampel1 = ampel1
ampelmanager.ampel2 = ampel2
ampelmanager.ampel3 = ampel3
ampelmanager.ampel4 = ampel4
ampelmanager.f_ampel1 = f_ampel1
ampelmanager.f_ampel2 = f_ampel2
ampelmanager.f_ampel3 = f_ampel3
ampelmanager.f_ampel4 = f_ampel4
(lampeRotA1, lampeGelbA1, lampeGruenA1) = ampel1.getLampen()
anzeigeAktualisierenA1(lampeRotA1, lampeGelbA1, lampeGruenA1)
(lampeRotA2, lampeGelbA2, lampeGruenA2) = ampel2.getLampen()
anzeigeAktualisierenA2(lampeRotA2, lampeGelbA2, lampeGruenA2)
(lampeRotA3, lampeGelbA3, lampeGruenA3) = ampel3.getLampen()
anzeigeAktualisierenA3(lampeRotA3, lampeGelbA3, lampeGruenA3)
(lampeRotA4, lampeGelbA4, lampeGruenA4) = ampel4.getLampen()
anzeigeAktualisierenA4(lampeRotA4, lampeGelbA4, lampeGruenA4)
(lampeRotFuA1, lampeGruenFuA1) = f_ampel1.getLampen()
anzeigeAktualisierenFuA1(lampeRotFuA1, lampeGruenFuA1)
(lampeRotFuA2, lampeGruenFuA2) = f_ampel2.getLampen()
anzeigeAktualisierenFuA2(lampeRotFuA2, lampeGruenFuA2)
(lampeRotFuA3, lampeGruenFuA3) = f_ampel3.getLampen()
anzeigeAktualisierenFuA3(lampeRotFuA3, lampeGruenFuA3)
(lampeRotFuA4, lampeGruenFuA4) = f_ampel4.getLampen()
anzeigeAktualisierenFuA4(lampeRotFuA4, lampeGruenFuA4)
for i in range(8):
ampelmanager.schalteAmpeln()
(lampeRot, lampeGelb, lampeGruen) = ampel1.getLampen()
anzeigeAktualisierenA1(lampeRot, lampeGelb, lampeGruen)
(lampeRot, lampeGelb, lampeGruen) = ampel2.getLampen()
anzeigeAktualisierenA2(lampeRot, lampeGelb, lampeGruen)
(lampeRot, lampeGelb, lampeGruen) = ampel3.getLampen()
anzeigeAktualisierenA3(lampeRot, lampeGelb, lampeGruen)
(lampeRot, lampeGelb, lampeGruen) = ampel4.getLampen()
anzeigeAktualisierenA4(lampeRot, lampeGelb, lampeGruen)
(lampeRot, lampeGruen) = f_ampel1.getLampen()
anzeigeAktualisierenFuA1(lampeRot, lampeGruen)
(lampeRot, lampeGruen) = f_ampel2.getLampen()
anzeigeAktualisierenFuA2(lampeRot, lampeGruen)
(lampeRot, lampeGruen) = f_ampel3.getLampen()
anzeigeAktualisierenFuA3(lampeRot, lampeGruen)
(lampeRot, lampeGruen) = f_ampel4.getLampen()
anzeigeAktualisierenFuA4(lampeRot, lampeGruen)