Hey Freunde, ich muss euch um Hilfe bitten.
Ich komme einfach nicht mehr weiter und habe irgendwo einen Denkfehler und würde gerne verstehen, wie sich tkinter genau verhält
Die Zeiten werden jetzt gut erfasst und in einer Datenbank abgelegt.
Jetzt hänge ich an meiner Login Vorstellung fest und bekomme es nicht umgesetzt.
Code: Alles auswählen
from tkinter import *
import tkinter as tk
import time
import datetime as dt
import sqlite3
verbindung = sqlite3.connect("datenbank.db")
zeiger = verbindung.cursor()
sql_anweisung = """
CREATE TABLE IF NOT EXISTS anlage (
user TEXT,
projekt TEXT,
aktion VARCHAR(30),
startzeit DATE,
endzeit DATE,
laufzeit DATE
);"""
zeiger.execute(sql_anweisung)
user = "Admin"
projekt = "FA 250135"
aktion = "Programm gestartet"
startzeit = dt.datetime.now()
endzeit = "0"
laufzeit = "0"
zeiger.execute("""
INSERT INTO anlage
VALUES (?,?,?,?,?,?)
""",
(user, projekt, aktion, startzeit, endzeit, laufzeit)
)
#verbindung.commit()
verbindung.close()
ebene = 1
status=0
#***************Funktion*************
#Vergleich des Status - Berechne die Laufzeit
def schreibeDatenbank():
global status, startzeit, laufzeit, endzeit, aktion
verbindung = sqlite3.connect("datenbank.db")
zeiger = verbindung.cursor()
zeiger.execute("""
INSERT INTO anlage
VALUES (?,?,?,?,?,?)
""",
(user, projekt, aktion, startzeit, endzeit, laufzeit)
)
verbindung.commit()
verbindung.close()
def statusabfrage():
global status, startzeit, laufzeit, endzeit, aktion,start_status1, start_status2, start_status3
#endzeit = dt.datetime.now()
if status==1:
endzeit = dt.datetime.now()
startzeit = start_status1
laufzeit = str(endzeit - start_status1)
aktion='Produktion'
elif status ==2:
endzeit = dt.datetime.now()
startzeit = start_status2
laufzeit = str(endzeit - start_status2)
aktion = 'Rüsten Aufbauen'
elif status ==3:
endzeit = dt.datetime.now()
startzeit = start_status3
laufzeit = str(endzeit - start_status3)
aktion = 'Rüsten Abbauen'
text_entryEnde.set(laufzeit)
schreibeDatenbank()
# Button Aktionen - Prüfung auf Wiederholten Tastenklick - setze Startzeit
def time_stat1():
global status, start_status1, start_status2,start_status3
if status== 1:
text_entryDaten.set('gleiche Zeitmessung')
else:
start_status1 = dt.datetime.now()
text_entryDaten.set(start_status1)
text_statusLabel.set('Status: Produktion\n -aktiv-')
statusabfrage()
status= 1
def time_stat2():
global status,start_status1,start_status2,start_status3
if status == 2:
text_entryDaten.set('gleiche Zeitmessung')
else:
start_status2 = dt.datetime.now()
text_entryDaten.set(start_status2)
text_statusLabel.set('Status: Rüsten\nAufbauen')
statusabfrage()
status = 2
def time_stat3():
global status,start_status1,start_status2,start_status3
if status == 3:
text_entryDaten.set('gleiche Zeitmessung')
else:
start_status3 = dt.datetime.now()
text_entryDaten.set(start_status3)
text_statusLabel.set('Status: Rüsten\nAbbauen')
statusabfrage()
status = 3
#erstelle Buttons
def create_button():
# Status Button
bn1 = tk.Button(tkFenster, text="Produktion",width = 15,height = 2, command=time_stat1)
bn1.grid(row=12, column=1,pady = '20', padx = '10')
bn1.config(foreground = "white" )
bn1.config(background = "blue")
bn2 = tk.Button(tkFenster, text= "Rüsten\n -Werkzeug aufbauen-",width = 15,height = 2,command=time_stat2)
bn2.grid(row=13, column=0,pady = '20', padx = '10')
bn2.config(foreground = "white" )
bn2.config(background = "blue")
bn3 = tk.Button(tkFenster, text="Rüsten\n - Werkzeug Abbauen-",width = 15,height = 2,command=time_stat3)
bn3.grid(row=13, column=1,pady = '20', padx = '10')
bn3.config(foreground = "white" )
bn3.config(background = "blue")
bn4 = tk.Button(tkFenster, text="Störung\n -Werkzeug- ",width = 15,height = 2)
bn4.grid(row=14, column=0,pady = '20', padx = '10')
bn4.config(foreground = "white" )
bn4.config(background = "blue")
bn5 = tk.Button(tkFenster, text="Störung\n -Qualität- ",width = 15,height = 2,)
bn5.grid(row=14, column=1,pady = '20', padx = '10')
bn5.config(foreground = "white" )
bn5.config(background = "blue")
bn6 = tk.Button(tkFenster, text="Störung\n -Rohstoff- ",width = 15,height = 2,)
bn6.grid(row=14, column=2,pady = '20', padx = '10')
bn6.config(foreground = "white" )
bn6.config(background = "blue")
bn7 = tk.Button(tkFenster, text="Störung\n -Maschine- ",width = 15,height = 2,)
bn7.grid(row=14, column=3,pady = '20', padx = '10')
bn7.config(foreground = "white" )
bn7.config(background = "blue")
bn8 = tk.Button(tkFenster, text="Störung\n -Maschine- ",width = 15,height = 2,)
bn8.grid(row=15, column=0,pady = '20', padx = '10')
bn8.config(foreground = "white" )
bn8.config(background = "blue")
#erstelle Loginfenster
def create_window():
window = Toplevel()
window.title('Login')
window.geometry('900x580')
global userEntry, password
#Benutzername Eingabefeld
userEntry = Entry(window, text='', width = 20)
userEntry.grid(row=0, column=1)
#Passwort Eingabefeld
password = Entry(window, text='', show='*')
password.grid(row=1, column=1)
#Label als Ausgabefeld/Bestätigung
entry_Ausgabe.set('')
ausgabe = Label(master=window,textvariable = entry_Ausgabe)
ausgabe.grid(row=2, column=1)
#Anmelde Button
buttonLogin = Button(window, text = 'Anmelden', command=login_click)
buttonLogin.grid(row=3, column=1)
#Abmelde Button
buttonLogout = Button(window, text = 'Abmelden', command=window.destroy)
buttonLogout.grid(row=4, column=1)
#Aktion Login Button
#to-do: Zugriff auf Hauptfenster Buttons, Admin Ebene / User Ebene per Datenbank
def login_click ():
global userEntry, password, user, ebene
# Übernahme der Daten
#global eingabe_username
eingabe_username = str(userEntry.get())
#eingabe_pw = str(password.get())
# Anzeige Anmeldeprozess
checkPasswort = "1234"
eingabe_pw = str(password.get())
if eingabe_pw == checkPasswort:
entry_Ausgabe.set('Erfolgreich angemeldet, Hallo' + eingabe_username)
#Übertrag auf tkFenster Label
labelAngemeldet.config(text='Angemeldet:' + eingabe_username)
user = str(userEntry.get())
ebene = 1
#entry_Ausgabe.set('3x falscher Benutzername oder falsches Passwort')
else:
entry_Ausgabe.set('falscher Benutzername oder falsches Passwort')
labelAngemeldet.config(text='Ausgeloggt')
#i = 0 #Hier läuft die 3er Überwachung nicht
#Aktion Logout Button _ Warum schließt das Fenster nicht bei destroy ?
def logout_click():
window.destroy
labelAngemeldet.config(text='Ausgeloggt')
#setup
#to-Do:Die Bezeichnung der Anlage soll der Admin ändern dürfen
anlage= 'MA 700t'
#erstelle Hauptfenster
tkFenster = Tk()
tkFenster.title('Datenerfassung')
entry_Ausgabe=StringVar()
text_statusLabel=StringVar()
#tkFenster.geometry('55x25')
# Label Angemeldet
labelAngemeldet = Label(master=tkFenster, text = 'Abgemeldet')
labelAngemeldet.grid(row=0, column=2)
# Label Überschrift Datenerfassung
labelÜberschrift = Label(master=tkFenster, bg='#265E80', fg= 'white',width = '60', text='Datenerfassung')
labelÜberschrift.grid(row=1,columnspan=6)
# Label Anlage
labelAnlage = Label(master=tkFenster,width=15, bg='#FFFFFF', fg='black', borderwidth=10, relief="groove", text='Anlage: ' + anlage)
labelAnlage.grid(row=2, column=0)
# Entry für Passwort
text_entryLogin = StringVar()
text_entryLogin.set('Passwort')#!!?
# Label für aktiven Status
labelStatus = Label(master=tkFenster,width = 15, bg='#FFFFFF', fg='black', borderwidth=10, height=2,relief="groove", textvariable=text_statusLabel)
labelStatus.grid(row=3, column=0)
# Label für Startzeit
labelStartzeit = Label(master=tkFenster, bg='#D5E88F', text='Startzeit:')
labelStartzeit.grid(row=4, column=1)
# Entry für Startzeit
text_entryDaten=StringVar()
entryDaten = Entry(master=tkFenster, bg='white', textvariable=text_entryDaten)
text_entryDaten.set('Start')
entryDaten.grid(row=5, column=1)
# Label für Endzeit
labelEndzeit = Label(master=tkFenster, bg='gray', text='Endzeit')
labelEndzeit.grid(row=6, column=1)
# Entry für Endzeit
text_entryEnde=StringVar()
entryEnde = Entry(master=tkFenster, bg='white', textvariable=text_entryEnde)
text_entryEnde.set('Ende')
entryEnde.grid(row=7, column=1)
text_statusLabel.set('Start')
# Login Button
bn_login= tk.Button(tkFenster, text="Login", command=create_window)
bn_login.grid(row=18, column=1)
if ebene ==1:
create_button()
if __name__ == "__main__":
# Aktivierung des Fensters
tkFenster.mainloop()
Verzeiht mit diese unübersichtliche und schlechte Programmierung.
Ich habe oben im Code die variable "ebene" erstmal auf 1 gesetzt, damit ihr die Buttons seht
Ich versuche die variable über login_click zu erfahren und darüber das tkFenster zu steuern.
Die variable ebene bleibt aber immer auf den selben Status.