ich habe mich, nachdem ich schon seit Wochen mitlese mich angemeldet, weil ich einfach seit Tagen nicht weiterkomme. Ich hab zwar vor ein paar Wochen nicht gedacht mich überhaupt so weit in Python reinzuarbeiten, aber jetzt kann ich das Problem echt nicht lösen. Ich hoffe jemand hilft mir bei dieser lappalie.
Der Code ist noch nicht ganz fertig aber meine Textvariablen in Tkinter werden einfach nicht angezeigt. Bevor ich angefangen habe mit den Klassen funktionierten dieDoubleVar und StringVar sehr gut. Aber nun geht gar nichts mehr. Ich muss auch zugeben das ich die Frames und Init Klasse nicht ganz verstanden habe. Die Probleme fangen in Zeile 256 an.
Vielen Dank schonmal für die Hilfe.
Hier der Code.
Code: Alles auswählen
import tkinter as tk
import time
from tkinter import filedialog
from tkinter import ttk
from tkinter import messagebox
from tkinter import Frame
from tkinter import Text
from tkinter import Label
import RPi.GPIO as GPIO
# import glob
from tkinter import StringVar
GPIO.setwarnings(False)
GPIO.setmode (GPIO.BCM)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(19,GPIO.OUT)
GPIO.output(13, GPIO.LOW)
class Programm(Frame):
count = 0
temperature = 0
temp_c = 0
counter_ruehren = 0
p = GPIO.PWM(19,100)
temperatur = 0
aufheizen_id = 0
temp_id = 0
temp = 0
arbeitsschritt = ("leerlauf")
ruehrt = False
schritteins = False
schrittzwei = False
heizunglaeuft = False
#Werte
aufheizen_down = float(73)
maltoserast_up = float(68)#40-50 Minuten
maltoserast_down = float(66)
amalyserast_up = float(73) #10-20 Minuten
amalyserast_down = float("71")
def vorgang(self):
app.arbeitsschritt = tk.StringVar()
app.arbeitsschritt.set("Vorgang auswählen")
def aktuelleTemperatur(self):
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/28-0300a279c08b/w1_slave')
self.filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
self.stringvalue = self.filecontent.split("\n")[1].split(" ")[9]
self.temp_c = float(self.stringvalue[2:]) / 1000
app.temp = tk.DoubleVar()
self.temp.set(self.temp_c)
print (self.temp.get())
self.temp_id = self.after(5000, self.aktuelleTemperatur)
def temperatur_holen(self):
self.aktuelleTemperatur()
def schritteins_start(self):
if self.schritteins == False:
self.arbeitsschritt = tk.StringVar()
self.arbeitsschritt.set("Aufheizen")
print(arbeitsschritt.get)
self.aufheizen()
else:
if messagebox.showinfo("Hinweis", "Anderer Prozess aktiv!"):
pass
def schrittzwei_start(self):
if self.schrittzwei == False:
self.schrittzwei = True
self.arbeitsschritt.set("Maltoserast")
self.maltoserast()
else:
if messagebox.showinfo("Hinweis", "Prozess aktiv!"):
pass
def stopper(self):
#self.arbeitsschritt.set("Stop")
GPIO.output(13, GPIO.LOW)
print("Heizung aus")
if self.schritteins == True:
self.after_cancel(self.aufheizen_id)
self.schritteins = False
if self.schrittzwei == True:
self.after_cancel(self.maltoserast_id)
self.schrittzwei = False
def stopbuttonclick(self):
self.stopper()
def aufheizen(self):
#print("Programm Aufheizen")
if self.temp_c < self.aufheizen_down:
print(self.temp.get())
Proigramm.arbeitsschritt = tk.StringVar()
Programm.arbeitsschritt.set("aufheizen")
self.schritteins = True
GPIO.output(13, GPIO.HIGH)
self.heizung_lauft = True
self.aufheizen_id = self.after(9000, self.aufheizen)
print("Heizung ein")
if self.temp_c > self.aufheizen_down:
GPIO.output(13, GPIO.LOW)
self.heizung_lauft = False
print("Temperatur erreicht")
if messagebox.showinfo("Hinweis", "Wasser ist aufgeheizt, Malz hinzugeben! Wenn es weitergeht OK drücken und auf Einmaischen gehen"):
self.stopper()
def maltoserast(self):
self.count = self.count +1
if count == 1200 or count == 2400 or count == 3300:
ruhren_lang()
print("rührt")
print(count)
if temp_status < maltoserast_down: #and arbeitsschritt_fertig == 1:
GPIO.output(13, GPIO.HIGH)
Maltoserast_id = root.after(1000, maltose_rast)
print("heizt Maltose")
if temp_status > maltoserast_up:
GPIO.output(13, GPIO.LOW)
Maltoserast_id = root.after(1000, maltose_rast)
print("Heizung aus")
if count == 3600:
GPIO.output(13, GPIO.LOW)
if messagebox.showinfo("Hinweis", "Verzuckerungsrast abgeschlossen"):
count = 0
arbeitsschritt_fertig = arbeitsschritt_fertig +1
#root.after_cancel(maltoserast_ende)
amalyse_rast()
stopper()
def amalyse_rast(self):
self.count = self.count +1
print(count)
temp_status = temp.get()
if count == 600 or count == 1000:
ruehren_lang()
print("rührt")
if temp_status < amalyserast_down: #and arbeitsschritt_fertig == 2:
GPIO.output(13, GPIO.HIGH)
amalyserast_id = root.after(1000, amalyse_rast)
print("heizen")
if temp_status > amalyserast_up: # and arbeitsschritt_fertig == 2:
GPIO.output(13, GPIO.LOW)
amalyserast_id = root.after(1000, amalyse_rast)
print("Heizung aus")
if count == 1200:
if messagebox.showinfo("Hinweis", "Amalyse abgeschlossen"):
count = 0
arbeitsschritt_fertig = arbeitsschritt_fertig +1
#root.after_cancel(amalyserast_ende)
return
print(arbeitsschritt_fertig)
def ruehren_ein(self):
if self.ruehrt == False:
self.ruehrt == True
self.p.start(100)
def ruehren_aus(self):
#if self.ruehrt == True:
self.p.stop()
self.ruehrt == False
def ruehren_lang(self):
if self.ruehrt == False:
self.ruehrt == True
self.p.start(100)
self.after(200000, self.ruehren_aus)
def heizung(self):
if self.heizunglaeuft == False:
GPIO.output(13, GPIO.HIGH)
self.heizunglaeuft == True
def heizung_aus(self):
#if self.heizunglaeuft == True:
GPIO.output(13, GPIO.LOW)
self.heizunglaeuft == False
def reset(self):
pass
def buttonBeendenClick(self):
if messagebox.askyesno('Beenden', 'Soll das Programm wirklich beendet werden?'):
self.stopper()
GPIO.cleanup()
self.quit()
mainWin.destroy()
def __init__(self, parent=None):
tk.Frame.__init__(self, parent)
tk.Frame.pack(self)
self.gui()
def gui(self):
self.lbl_free = (tk.Label (self, text = "-----"))
self.lbl_free2 = (tk.Label (self, text = "-----"))
self.start = (tk.Button (self, height = 5, width = 50, text = "Aufheizen", command = lambda: self.schritteins_start()))
self.stop = (tk.Button (self, height = 2, width = 50, text = "Stop", command = lambda: self.stopbuttonclick()))
self.ruhren = (tk.Button (self, text = "Rühren Ein", height = 2, width = 50,command = lambda: self.ruehren_ein()))
self.ruhren_aus = (tk.Button (self, text = "Rühren Aus", height = 2, width = 50,command = lambda: self.ruehren_aus()))
self.heizen = (tk.Button (self, text = "Heizen Ein", height = 2, width = 50,command = lambda: self.heizung()))
self.heizen_aus = (tk.Button (self, text = "Heizen Aus", height = 2, width = 50,command = lambda: self.heizung_aus()))
self.einmaischen = (tk.Button (self, text = "Einmaischen", height = 5, width = 50, command = lambda: self.schrittzwei_start()))
self.zurucksetzen = (tk.Button (self, text = "Zurücksetzen", height = 2, width = 50, command = lambda: self.reset()))
self.Beenden = (tk.Button (self, text = "Beenden", height = 2, width = 50, command = lambda: self.buttonBeendenClick()))
self.aktuell_temp_lbl = (tk.Label (Frame, textvariable = self.temp))
self.arbeitsschritt_lbl = (tk.Label (self, textvariable = self.arbeitsschritt))
self.lbl_free.grid(row = 16, column =0)
self.start.grid(row=7, column=0)
self.einmaischen.grid(row = 7, column = 1)
self.stop.grid(row=9, column=0)
self.ruhren.grid(row=12, column=0)
self.ruhren_aus.grid(row=12, column=1)
self.heizen.grid(row=13, column=0)
self.heizen_aus.grid(row=13, column=1)
self.lbl_free2.grid(row=11, column=0)
self.zurucksetzen.grid(row=9, column=1)
self.Beenden.grid(row=18, column=0)
self.aktuell_temp_lbl(row=19, column=0)
self.arbeitsschritt_lbl(row=19, column=0)
mainWin = tk.Tk()
app = Programm(mainWin)
app.temperatur_holen()
app.vorgang()
mainWin.mainloop()