Hallo,
ich bin ein absoluter neuling in python programmierung.
Nachdem ich mich einigermaßen erfolgreich durch das Buch "Einstieg in Python" gekämpft habe, stoß ich nun an meine Grenzen.
Ich habe hier ein kleines Raspberry Projekt ins Leben gerufen, wo ich mittels Button Ausgänge ein und ausschalten kann.
Die Funktion ist gegenben, und nun möchte ich je nach Zustand des Ausgangs den Button verschiedene Farben verpassen.
Den aktuellen Status des Ausgangs kann ich abfragen und habe diesen mit 1 oder 0 in einer Variable!
nun ist mein Problem, dass innerhalb der mainloop Schleife anscheinend keinerlei Variablen aktualisiert werden, lediglich beim Programmstart einmal aufgerufen werden.
Nach sehr langem Googeln bin ich auf " thinker after funkton gestoßen" konnte diese allerdings nicht erfolgreich einsetzen.
wie müsst diese after Funktion aussehen, um eine Variable z.B sekündlich innerhalb der mainloop schleife zu aktualisiern???
oder wie sieht eine alternative dazu aus ???
Gruß
Wolfi
Noob benötigt hilfe mit variable innerhalb mainloop
@Wolflkoder: Das löst man mit objektorientierter Programmierung und Attributen. Und da müsstest Du dann halt einfach das Attribut in einer Methode setzen die mittels `after()` dann immer wieder aufgerufen wird.
Wobei ich jetzt gerade verwirrt bin denn wie die *Ausgänge* geschaltet sind weisst Du doch, die hast Du doch selber geschaltet. Das Problem regelmässig Zustand abfragen zu müssen besteht doch bei *Eingängen* weil man da eben nicht weiss was da jemand von aussen mit anstellt.
Wobei ich jetzt gerade verwirrt bin denn wie die *Ausgänge* geschaltet sind weisst Du doch, die hast Du doch selber geschaltet. Das Problem regelmässig Zustand abfragen zu müssen besteht doch bei *Eingängen* weil man da eben nicht weiss was da jemand von aussen mit anstellt.
-
- User
- Beiträge: 28
- Registriert: Sonntag 7. Dezember 2014, 15:57
Hallo, die Ausgänge werden von verschiedenen Geräten geschaltet, und daher muss ich den Zustand abfragen.
@Wolflkoder: Die *Aus*gänge? Ich denke immer noch Du verwechselst hier die Begriffe Ein- und Ausgang.
-
- User
- Beiträge: 28
- Registriert: Sonntag 7. Dezember 2014, 15:57
NEIN!
Ausgang = Spannung = schaltet Relais
Stellenweiße sind diese flankengesteuert, sprich Eingangsimpuls Ausgang = 1, zweiter Impuls Ausgang = 0
Ausgang = Spannung = schaltet Relais
Stellenweiße sind diese flankengesteuert, sprich Eingangsimpuls Ausgang = 1, zweiter Impuls Ausgang = 0
-
- User
- Beiträge: 28
- Registriert: Sonntag 7. Dezember 2014, 15:57
NEIN!
Ausgang = Spannung = schaltet Relais
Stellenweiße sind diese flankengesteuert, sprich Eingangsimpuls == Ausgang = 1, zweiter Impuls Ausgang = 0
Aber unabhängig von EIN bzw AUS-gang habe ich ja bereits das richtige Signal in einer Variable
kann diese nur nicht innerhalb der Mainloop verwenden.
Ausgang = Spannung = schaltet Relais
Stellenweiße sind diese flankengesteuert, sprich Eingangsimpuls == Ausgang = 1, zweiter Impuls Ausgang = 0
Aber unabhängig von EIN bzw AUS-gang habe ich ja bereits das richtige Signal in einer Variable
kann diese nur nicht innerhalb der Mainloop verwenden.
Wolflkoder: DOCH! Du hast geschrieben Du willst von einem *Aus*gang wissen was da anliegt, das muss man aber nur bei *Ein*gängen abfragen. Selbst wenn man sich das bei einem *Aus*gang nicht gemerkt haben sollte was man da angelegt hat, macht es IMHO keinen Sinn das mit `after()` regelmässig abzufragen.
Ich bin mir deshalb immer noch nicht darüber klar was Du da überhaupt letztendlich erreichen möchtest. Mit ”Variablen” und rein mit Funktionen wirst Du wie gesagt bei GUI-Programmierung nicht auskommen, da brauchst Du objektorientierte Programmierung (OOP). Und dann wäre ein konkretes, nachvollziehbares Problem ganz praktisch wenn man helfen können soll.
Ich bin mir deshalb immer noch nicht darüber klar was Du da überhaupt letztendlich erreichen möchtest. Mit ”Variablen” und rein mit Funktionen wirst Du wie gesagt bei GUI-Programmierung nicht auskommen, da brauchst Du objektorientierte Programmierung (OOP). Und dann wäre ein konkretes, nachvollziehbares Problem ganz praktisch wenn man helfen können soll.
-
- User
- Beiträge: 28
- Registriert: Sonntag 7. Dezember 2014, 15:57
ich will nicht abfragen ob am Ausgang was ansteht, sonder ich möchte wissen ob der Ausgang geschaltet hat.
z.b möchte ich von unterwegs wissen ist die Lampe an, oder ist diese aus.
Genau diese Information habe ich bereits.
mit dieser Information die sich z.B in "Ausgabe" befindet möchte ich innerhalb der mainloop schleife arbeiten.
z.b.
if Ausgang == 1:
b8.config(background="white", foreground="black")
b9.config(background="green", foreground="black")
elif Ausgang == 0:
b8.config(background="red", foreground="black")
b9.config(background="white", foreground="black")
z.b möchte ich von unterwegs wissen ist die Lampe an, oder ist diese aus.
Genau diese Information habe ich bereits.
mit dieser Information die sich z.B in "Ausgabe" befindet möchte ich innerhalb der mainloop schleife arbeiten.
z.b.
if Ausgang == 1:
b8.config(background="white", foreground="black")
b9.config(background="green", foreground="black")
elif Ausgang == 0:
b8.config(background="red", foreground="black")
b9.config(background="white", foreground="black")
@Wolflkoder: So kommen wir nicht weiter. Das ist immer noch kein konkretes Problem. Unter der Vorraussetzung das die Namen alle entsprechend definiert sind, funktioniert der gezeigte Quelltext.
-
- User
- Beiträge: 28
- Registriert: Sonntag 7. Dezember 2014, 15:57
OK, danke für die Geduld!
hier mein ganzer Quelltext ( bedenke Noob )
wie bekomme ich den Inhalt von " Ausgang " in der Funktion status() in die Funktion gui()
hier mein ganzer Quelltext ( bedenke Noob )
wie bekomme ich den Inhalt von " Ausgang " in der Funktion status() in die Funktion gui()
Code: Alles auswählen
#!/usr/bin/env python
from webiopi.protocols.coap import * # I/Os Raspberry
from time import sleep # Zeitsteuerung
from tkinter import * # für Button Einstellungen
import tkinter # Visualisierung
import re # inhalt einer Datei ermitteln
import time, _thread # Multitasking
client = COAPClient() #Protokoll für Übertragung
# Klasse definieren
#class Zustand(self,wert)
global Ausgang
Ausgang = 3 # test
def gui():
# Hauptfenster
main = tkinter.Tk()
main.title("Steuerung")
main.overrideredirect('TRUE')
main.geometry('+200+1050')
# Button Licht hinten
b1 = tkinter.Button(main)
b1["text"]="Licht hinten"
b1["command"] = Licht_hinten
# Button Licht vorne
b2 = tkinter.Button(main)
b2["text"] = "Licht vorne"
b2["command"] = Licht_vorne
# Button Rollo hinten auf
b3 = tkinter.Button(main)
b3["text"] = "Rollo hinten auf"
b3["command"] = Rollo_hinten_auf
# Button Rollo hinten ab
b4 = tkinter.Button(main)
b4["text"] = "Rollo hinten ab"
b4["command"] = Rollo_hinten_ab
# Button Rollo vorne auf
b5 = tkinter.Button(main)
b5["text"] = "Rollo vorne auf"
b5["command"] = Rollo_vorne_auf
# Button Rollo vorne ab
b6 = tkinter.Button(main)
b6["text"] = "Rollo vorne ab"
b6["command"] = Rollo_vorne_ab
# Button Beenden
b7 = tkinter.Button(main)
b7["text"] = "beenden"
b7["command"] = ende
# Button TESTBUTTON
b8 = tkinter.Button(main)
b8["text"] = "TEST AN"
b8["command"] = test
# Button TESTBUTTON
b9 = tkinter.Button(main)
b9["text"] = "TEST AUS"
b9["command"] = test2
# Button breite
b1["width"] = 20
b2["width"] = 20
b3["width"] = 20
b4["width"] = 20
b5["width"] = 20
b6["width"] = 20
b7["width"] = 20
b8["width"] = 20
b9["width"] = 20
#Position
b1.pack(side=LEFT)
b2.pack(side=LEFT)
b3.pack(side=LEFT)
b4.pack(side=LEFT)
b5.pack(side=LEFT)
b6.pack(side=LEFT)
b7.pack(side=LEFT)
b8.pack(side=LEFT)
b9.pack(side=LEFT)
#Schriftart
b1.config(font=('Arial', 8))
b2.config(font=('Arial', 8))
b3.config(font=('Arial', 8))
b4.config(font=('Arial', 8))
b5.config(font=('Arial', 8))
b6.config(font=('Arial', 8))
b7.config(font=('Arial', 8))
b8.config(font=('Arial', 8))
b9.config(font=('Arial', 8))
#Farbe
b1.config(background="white", foreground="black")
b2.config(background="white", foreground="black")
b3.config(background="white", foreground="black")
b4.config(background="white", foreground="black")
b5.config(background="white", foreground="black")
b6.config(background="white", foreground="black")
b7.config(background="white", foreground="black")
global Ausgang
if Ausgang == 1:
b8.config(background="white", foreground="black")
b9.config(background="green", foreground="black")
elif Ausgang == 0:
b8.config(background="red", foreground="black")
b9.config(background="white", foreground="black")
else:
b8.config(background="orange", foreground="black")
b9.config(background="orange", foreground="black")
# Buttons anzeigen
b1.pack()
b2.pack()
b3.pack()
b4.pack()
b5.pack()
b6.pack()
b7.pack()
b8.pack()
b9.pack()
print ("Wert in Schleife:",Ausgang)
main.mainloop()
# Funktionen
def ende():
main.destroy()
def Licht_hinten():
print("Licht hinten")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/22/value/0"))
sleep(0.5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/22/value/1"))
def Licht_vorne():
print("Licht vorne")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/27/value/0"))
sleep(0.5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/27/value/1"))
def Rollo_hinten_auf():
print("Rollo hinen auf")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/2/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/2/value/1"))
def Rollo_hinten_ab():
print("Rollo hinten ab")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/3/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/3/value/1"))
def Rollo_vorne_auf():
print("Rollo vorne auf")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/4/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/4/value/1"))
def Rollo_vorne_ab():
print("Rollo vorne ab")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/17/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/17/value/1"))
def test():
print ("Testbutton ein")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/23/value/0"))
response = client.sendRequest(COAPGet("coap://192.168.123.49/GPIO/23/value/"))
#print(response)
def test2():
print ("Testbutton aus")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/23/value/1"))
response = client.sendRequest(COAPGet("coap://192.168.123.49/GPIO/23/value/"))
#print(response)
def status():
while 1:
response = client.sendRequest(COAPGet("coap://192.168.123.49/GPIO/23/value/"))
str_response = str(response)
global Ausgang
if re.search(r"(b'1')",str_response):
print("Wert ist 1")
Ausgang = 1
elif re.search(r"(b'0')",str_response):
print("Wert ist 0")
Ausgang = 0
else:
print("Fehler")
sleep(1)
while 1:
_thread.start_new_thread (status,()) # Abfrage parallel starten
gui()
Zuletzt geändert von Anonymous am Sonntag 7. Dezember 2014, 22:20, insgesamt 2-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Grund: Quelltext in Python-Code-Tags gesetzt.
@Wolflkoder: Vergiss als erstes das es ``global`` gibt. Und dann bitte das `_thread`-Modul. Der führende Unterstrich bedeutet dass das kein Teil der öffentlichen API ist, also nicht für Dich zum verwenden gedacht ist. Die öffentliche API ist das `threading`-Modul.
Dann sollte auf Modulebene nichts stehen was nicht Konstanten, Funktionen, oder Klassen definiert. Das Hauptprogramm steck üblicherweise in einer Funktion die `main()` heisst und mit folgendem Idiom am Ende des Modulquelltextes aufgerufen wird:
Sternchenimporte sind keine gute Idee. Damit holt man sich alle Namen aus dem betreffenden Modul in das aktuelle Modul. Bei `tkinter` sind das über 190 Stück.
Die erste Zeile ist sehr wahrscheinlich falsch, oder ist bei Deinem Raspi tatsächlich ein Python 3 unter dem Namen ``python`` installiert?
Durchnummerierte, einbuchstabige Namen sind schlecht. Der Name sollte dem Leser vermitteln was der Wert bedeutet der daran gebunden ist. `b6` tut das sicherlich nicht.
Warum werden die Schaltflächen so umständlich konfiguriert anstatt das alles beim erstellen des Objekts zu erledigen.
Die Kommentare sind dort alle total überflüssig. Wer beim Code zum Kommentar ``# Button Licht hinten`` nicht erkennt dass dort der Button für das Licht hinten erstellt wird, dann wird der Kommentar auch nicht mehr helfen. Faustregel: Kommentare sollten nicht sagen *was* der Code macht, sondern *warum*. Aber auch nur für den Fall dass das nicht aus dem Code ersichtlich wird, und man den nicht deutlicher hinbekommt.
Man muss/sollte Widgets nur *einmal* layouten.
Die ganzen Funktionen für die Schaltflächen sind alle *sehr* ähnlich. Das sieht nach kopieren, einfügen, und leicht verändern aus. Das vermeidet man als Programmierer. Das ist ja gerade ein Aspekt von Funktionen das man ähnlichen Code nicht wieder und wieder in leichten Variationen hat, sondern eine Funktion schreibt bei der die Variationen als Argumente übergeben werden.
Werte sollten Funktionen als Argumente betreten und gegebenfalls als Rückgabewerte verlassen.
Was immer `client.sendRequest()` als Rückgabewert liefert: Man wandelt das nicht in eine Zeichenkette um und verwendet dann auch noch völlig unnötigerweise reguläre Ausdrücke um literale Pythonwerte darin zu suchen. Verwende den Wert der da zurückgegeben wird und nicht eine Zeichenkettenrepräsentation davon!
Python hat den Datentyp `bool` und dessen Werte `True` und `False`, die sollte man auch verwenden und nicht 1 und 0 dafür missbrauchen.
In einer Endlosschleife am Ende immer wieder Threads zu starten und neue GUIs zu erstellen ”funktioniert” nur weil die `gui()`-Funktion am Ende in der GUI-Hauptschleife steckt die erst wieder zurückkehrt wenn das Fenster geschlossen wird.
Dann sollte auf Modulebene nichts stehen was nicht Konstanten, Funktionen, oder Klassen definiert. Das Hauptprogramm steck üblicherweise in einer Funktion die `main()` heisst und mit folgendem Idiom am Ende des Modulquelltextes aufgerufen wird:
Code: Alles auswählen
if __name__ == '__main__':
main()
Die erste Zeile ist sehr wahrscheinlich falsch, oder ist bei Deinem Raspi tatsächlich ein Python 3 unter dem Namen ``python`` installiert?
Durchnummerierte, einbuchstabige Namen sind schlecht. Der Name sollte dem Leser vermitteln was der Wert bedeutet der daran gebunden ist. `b6` tut das sicherlich nicht.
Warum werden die Schaltflächen so umständlich konfiguriert anstatt das alles beim erstellen des Objekts zu erledigen.
Die Kommentare sind dort alle total überflüssig. Wer beim Code zum Kommentar ``# Button Licht hinten`` nicht erkennt dass dort der Button für das Licht hinten erstellt wird, dann wird der Kommentar auch nicht mehr helfen. Faustregel: Kommentare sollten nicht sagen *was* der Code macht, sondern *warum*. Aber auch nur für den Fall dass das nicht aus dem Code ersichtlich wird, und man den nicht deutlicher hinbekommt.
Man muss/sollte Widgets nur *einmal* layouten.
Die ganzen Funktionen für die Schaltflächen sind alle *sehr* ähnlich. Das sieht nach kopieren, einfügen, und leicht verändern aus. Das vermeidet man als Programmierer. Das ist ja gerade ein Aspekt von Funktionen das man ähnlichen Code nicht wieder und wieder in leichten Variationen hat, sondern eine Funktion schreibt bei der die Variationen als Argumente übergeben werden.
Werte sollten Funktionen als Argumente betreten und gegebenfalls als Rückgabewerte verlassen.
Was immer `client.sendRequest()` als Rückgabewert liefert: Man wandelt das nicht in eine Zeichenkette um und verwendet dann auch noch völlig unnötigerweise reguläre Ausdrücke um literale Pythonwerte darin zu suchen. Verwende den Wert der da zurückgegeben wird und nicht eine Zeichenkettenrepräsentation davon!
Python hat den Datentyp `bool` und dessen Werte `True` und `False`, die sollte man auch verwenden und nicht 1 und 0 dafür missbrauchen.
In einer Endlosschleife am Ende immer wieder Threads zu starten und neue GUIs zu erstellen ”funktioniert” nur weil die `gui()`-Funktion am Ende in der GUI-Hauptschleife steckt die erst wieder zurückkehrt wenn das Fenster geschlossen wird.
-
- User
- Beiträge: 28
- Registriert: Sonntag 7. Dezember 2014, 15:57
Erst mal danke für den komplett check!!!
Das ist schon mal sehr viel Imput für einen Neuling, kann mir jetzt die Finger wund googlen.
Aber bevor ich mich ans optimieren mache, möchte ich zuerst meine Funktionalität haben.
Ich habe hier meine ersten Versuche mit der Objektorientierten Programmierung, leider noch ohne Erfolg bzw. Funktion.
Hier ist mein umgearbeiteter Code.
Könntest du mir sagen ob der Aufruf am Ende des Programms so richtig ist, und kann ich in der Funkton status() meinen Wert mittels return zurückgeben ?
Das ist schon mal sehr viel Imput für einen Neuling, kann mir jetzt die Finger wund googlen.
Aber bevor ich mich ans optimieren mache, möchte ich zuerst meine Funktionalität haben.
Ich habe hier meine ersten Versuche mit der Objektorientierten Programmierung, leider noch ohne Erfolg bzw. Funktion.
Hier ist mein umgearbeiteter Code.
Könntest du mir sagen ob der Aufruf am Ende des Programms so richtig ist, und kann ich in der Funkton status() meinen Wert mittels return zurückgeben ?
Code: Alles auswählen
#!/usr/bin/env python
from webiopi.protocols.coap import * # I/Os Raspberry
from time import sleep # Zeitsteuerung
from tkinter import * # für Button Einstellungen
import tkinter # Visualisierung
import re # inhalt einer Datei ermitteln
import time, _thread # Multitasking
client = COAPClient() #Protokoll für Übertragung
global Ausgang #test
Ausgang = True #test
# Funktionen
def ende():
main.destroy()
def Licht_hinten():
print("Licht hinten")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/22/value/0"))
sleep(0.5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/22/value/1"))
def Licht_vorne():
print("Licht vorne")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/27/value/0"))
sleep(0.5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/27/value/1"))
def Rollo_hinten_auf():
print("Rollo hinen auf")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/2/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/2/value/1"))
def Rollo_hinten_ab():
print("Rollo hinten ab")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/3/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/3/value/1"))
def Rollo_vorne_auf():
print("Rollo vorne auf")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/4/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/4/value/1"))
def Rollo_vorne_ab():
print("Rollo vorne ab")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/17/value/0"))
sleep(5)
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/17/value/1"))
def test():
print ("Testbutton ein")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/23/value/0"))
response = client.sendRequest(COAPGet("coap://192.168.123.49/GPIO/23/value/"))
#print(response)
def test2():
print ("Testbutton aus")
client.sendRequest(COAPPost("coap://192.168.123.49/GPIO/23/value/1"))
response = client.sendRequest(COAPGet("coap://192.168.123.49/GPIO/23/value/"))
#print(response)
def status():
response = client.sendRequest(COAPGet("coap://192.168.123.49/GPIO/23/value/"))
str_response = str(response)
if re.search(r"(b'1')",str_response):
print("Wert ist True")
Ausgang = True
elif re.search(r"(b'0')",str_response):
print("Wert ist False")
Ausgang = False
else:
print("Fehler")
return Ausgang
main = tkinter.Tk()
main.title("Steuerung")
main.overrideredirect('TRUE')
main.geometry('+200+1050')
button1 = tkinter.Button(main,text="Licht hinten",command=Licht_hinten,width=20)
button1.pack(side=LEFT)
button1.config(font=('Arial', 8))
button1.config(background="white", foreground="black")
button1.pack()
button2 = tkinter.Button(main,text = "Licht vorne",command=Licht_vorne,width=20)
button2.pack(side=LEFT)
button2.config(font=('Arial', 8))
button2.config(background="white", foreground="black")
button2.pack()
button3 = tkinter.Button(main,text="Rollo hinten auf",command=Rollo_hinten_auf,width=20)
button3.pack(side=LEFT)
button3.config(font=('Arial', 8))
button3.config(background="white", foreground="black")
button3.pack()
button4 = tkinter.Button(main,text="Rollo hinten ab",command=Rollo_hinten_ab,width=20)
button4.pack(side=LEFT)
button4.config(font=('Arial', 8))
button4.config(background="white", foreground="black")
button4.pack()
button5 = tkinter.Button(main,text="Rollo vorne auf",command=Rollo_vorne_auf,width=20)
button5.pack(side=LEFT)
button5.config(font=('Arial', 8))
button5.config(background="white", foreground="black")
button5.pack()
button6 = tkinter.Button(main,text="Rollo vorne ab",command=Rollo_vorne_ab,width=20)
button6.pack(side=LEFT)
button6.config(font=('Arial', 8))
button6.config(background="white", foreground="black")
button6.pack()
button7 = tkinter.Button(main,text="beenden",command=ende,width=20)
button7.pack(side=LEFT)
button7.config(font=('Arial', 8))
button7.config(background="white", foreground="black")
button7.pack()
button8 = tkinter.Button(main,text="TEST AN",command=test,width=20)
button8.pack(side=LEFT)
button8.config(font=('Arial', 8))
button8.pack()
button9 = tkinter.Button(main,text="TEST AUS",command=test2,width=20)
button9.pack(side=LEFT)
button9.config(font=('Arial', 8))
button9.pack()
if Ausgang == True:
button8.config(background="white", foreground="black")
button9.config(background="green", foreground="black")
elif Ausgang == False:
button8.config(background="red", foreground="black")
button9.config(background="white", foreground="black")
else:
button8.config(background="orange", foreground="black")
button9.config(background="orange", foreground="black")
class Abfrage:
def __init__(self, status):
self.status = status
self.poll() # abrufen
def poll(self):
status()
self.status.after(100, self.poll)
main.mainloop()