versuche mit tkinter eine zeiterfassung am pi zu machen, leider klappt das nicht so wie ich es mir vorstelle, das frame oder die labels oder die buttons sollten alle 2 sekunden updaten, zb. erst wird in der DB geschaut wer da ist dann werden die entsprechenden labels mit users gefüllt die buttons werden mit entsprechenden befehlen kommen, pause etc gefüllt, dann geht ein user in die pause drückt den button pause, jetzt sollte das ganze Frame oder ?????? updaten und bei dem user anzeigen das er in der pause ist und im nur noch ein button zu verfügung stehen "kommen", ich bekomme den update nicht hin wenn ich das fenster schließe kommt ein neues fenster und alles ist richtig (loop), jedoch möchte ich nicht das man das fenster schliest um den update hin zu bekommen.
Das mein erster versuch mit tkinter, bin neuling.
Ich werde mal den code dran hängen (ist jetzt nur der erste versuch es soll funktionieren, danach möchte ich versuchen den code zu vereinfachen), vielleicht kann mir einer helfen.
Danke im Voraus
code:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
#test 08.10.2014
# Zeitkorrektur = !
# Abwesend = g
# Pause = p
# Mittag=m
# Arbeit = k
import MySQLdb
import sys
import ftplib
import time
import datetime
import os
import subprocess
from subprocess import Popen, PIPE, STDOUT
from Tkinter import *
#import Tkinter as tk
while True:
#data = True
ts = time.time()
sec = int(ts)
dat = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
zeit = datetime.datetime.fromtimestamp(ts).strftime('%H:%M:%S')
zeit1 = datetime.datetime.fromtimestamp(ts).strftime('%H')
time1 = ''
aus = 0 #wird später benötigt
an = 0 #wird später benötigt
b = 0 #ein test wird eigentlich nicht benötigt
"""verbindung zu DB ****,******"""
db=MySQLdb.connect("*****","****","****l","****")
#verbindung zu richtigen db
#db=MySQLdb.connect ("*****","*****","****","*****")
#"""steht verbindung, wenn ja dann weiter"""
#"""if (db):
# print "alles ok!"
# else:
# print "etwas stimmt nicht!" """
# """etwas aus db auslesen"""
cursor = db.cursor()
rfidnr = open("/***/****/****/test.txt").read() #test für einen user wird ersetzt
query = "SELECT idx, status FROM users WHERE RFID = '" + (rfidnr) + "'"
cursor.execute(query)
row = cursor.fetchall()
for row0 in cursor:
idx_user = row0[0]
stat = row0[1]
class Gui(object):
def an(self):
self.butan.config(text='An')
def aus(self):
self.butaus.config(text='Aus')
### definition buttons ###
#hier definiere ich die buttons sieht nicht gut, mit meinem kentniss stand habe ich es im moment nicht besser hinbekommen
def buttonk(self):
db=MySQLdb.connect("****","****","***","****")
cursor = db.cursor()
stat = "SELECT idx, status FROM users WHERE RFID = '" + (rfidnr) + "'"
cursor.execute(stat)
row = cursor.fetchall()
for row0 in cursor:
idx_user = row0[0]
stat = row0[1]
if (stat == 'g' or stat == ''):
cursor.execute("UPDATE users SET status='k' WHERE idx = %s",(idx_user))
cursor.execute("INSERT INTO Zeitstempel (idx, Datum, Uhrzeit, Sekunden, Status) VALUES (%s, %s, %s, %s, %s)",(idx_user,dat,zeit,sec,'k'))
elif (stat == 'p' or stat == 'm' or stat == 'd'):
cursor.execute("UPDATE users SET status='k' WHERE idx = %s",(idx_user))
cursor.execute("SELECT status, Uhrzeit FROM Zeitstempel WHERE idx = %s AND Datum = %s AND Status = %s Order by Sekunden DESC",(idx_user,dat,stat))
row5 = cursor.fetchall()
for row5 in cursor:
z1 = row5[1]
statn = row5[0]
if z1 != 0:
cursor.execute("INSERT INTO Arbeitszeit (idx, Datum, z1, z2, status) VALUES (%s, %s, %s, %s, %s)",(idx_user,dat,z1,zeit,statn))
cursor.execute("DELETE FROM Zeitstempel WHERE idx = %s AND status = %s AND Datum = %s",(idx_user,statn,dat))
cursor.close()
db.close()
def buttonp(self):
db=MySQLdb.connect("*****","****","****","*****")
cursor = db.cursor()
cursor.execute("""UPDATE users SET status = 'p' WHERE idx = %s""",(idx_user))
cursor.execute("""INSERT INTO Zeitstempel (idx, Datum, Uhrzeit, Sekunden, Status) VALUES (%s, %s, %s, %s, %s)""",(idx_user,dat,zeit,sec,'p'))
cursor.close()
db.close()
def buttonm(self):
db=MySQLdb.connect("*****","****","****","*****")
cursor = db.cursor()
cursor.execute("UPDATE users SET status = 'm' WHERE idx = %s",(idx_user))
cursor.execute("INSERT INTO Zeitstempel (idx, Datum, Uhrzeit, Sekunden, Status) VALUES (%s, %s, %s, %s, %s)",(idx_user,dat,zeit,sec,'m'))
cursor.close()
db.close()
def buttond(self):
db=MySQLdb.connect("*****","****","****","*****")
cursor = db.cursor()
cursor.execute("UPDATE users SET status = 'd' WHERE idx = %s", (idx_user))
cursor.execute("INSERT INTO Zeitstempel (idx, Datum, Uhrzeit, Sekunden, Status) VALUES (%s, %s, %s, %s, %s)",(idx_user,dat,zeit,sec,'d'))
cursor.close()
db.close()
def buttong(self):
db=MySQLdb.connect("*****","****","****","*****")
cursor = db.cursor()
#print stat,"was steht im stat"
cursor.execute("UPDATE users SET status = 'g' WHERE idx = %s",(idx_user))
cursor.execute("SELECT Status, Uhrzeit FROM Zeitstempel WHERE idx = %s AND Datum = %s AND Status = %s ORDER BY Sekunden DESC",(idx_user,dat,stat))
row8 = cursor.fetchall()
for row8 in cursor:
statnew = row8[0]
z1new = row8[1]
if (row8 != 0):
cursor.execute("INSERT INTO Arbeitszeit (idx, Datum, z1, z2, status) VALUES (%s, %s, %s, %s, %s)",(idx_user,dat,z1new,zeit,'A'))
cursor.execute("DELETE FROM Zeitstempel WHERE status = %s AND Datum = %s AND idx = %s",(statnew,dat,idx_user))
cursor.close()
db.close()
def run(self):
r = 0
#def statuse():
db=MySQLdb.connect("*****","****","****","*****")
cursor = db.cursor()
### ein frame für user status korrektur ###
self.statusframe = Frame(self.fenster, height = 440, bg = "#AAC4D3", relief = "flat", border = 2)
self.statusframe.pack(fill='x', pady = "1")
### möglicherweise ist der statusframe zu viel
### ein frame im statusframe für user ###
self.userf = Frame(self.statusframe, bg = "#AAC4D3", relief = "sunken", border = 2)
self.userf.pack(fill = 'x', side = LEFT)
cursor.execute("SELECT idx, user, status, korrektur, name, Urlaubsanspruch, Resturlaub FROM users ORDER BY idx")
r = 0
for row13 in cursor:
user = row13[1]
stat = row13[2]
korr = row13[3]
name = row13[4]
if (korr == 'k'):
korr = "ZEITKORREKTUR"
if (stat == 'g'):
self.labuser = Label(self.userf, relief = RAISED, width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", text = name) .grid(row=r,column=0)
self.labstat = Label(self.userf, relief=SUNKEN, width=12, height=2, bg="red", font = "Verdana 10 bold", text="gehen") .grid(row=r,column=1)
self.labkorr = Label(self.userf, relief=SUNKEN, width=14, height=2, bg="#AAC4D3", font="Verdana 10 bold", fg="red", text=korr) .grid(row=r,column=2)
self.butk = Button(self.userf, relief=RAISED, width=4, height=1, bg='green', text='kommen', command=self.buttonk).grid(row=r,column=3)
r = r + 1 + 2 + 3 + 4 + 5 + 6 + 7
print user,korr,""
elif (stat == 'p'):
self.labuser = Label(self.userf, relief=RAISED, width=15, height=2, bg="#AAC4D3", font = "Verdana 10 bold", text=name) .grid(row=r,column=0)
self.labstat = Label(self.userf, relief=SUNKEN, width=12, height=2, bg="yellow", font = "Verdana 10 bold", text="Pause") .grid(row=r,column=1)
self.labkorr = Label(self.userf, relief=SUNKEN, width=14, height=2, bg="#AAC4D3", font="Verdana 10 bold", fg="red", text=korr) .grid(row=r,column=2)
self.butk = Button(self.userf, relief=RAISED, width=4, height=1, bg='green', text='kommen', command=self.buttonk).grid(row=r,column=3)
r = r + 1 + 2 + 3 + 4 + 5 + 6 + 7
print user,korr,"pause"
elif (stat == 'd'):
self.labuser = Label(self.userf, relief=RAISED, width=15, height=2, bg="#AAC4D3", font = "Verdana 10 bold", text=name) .grid(row=r,column=0)
self.labstat = Label(self.userf, relief=SUNKEN, width=12, height=2, bg="yellow", font = "Verdana 10 bold", text="dienstgang") .grid(row=r,column=1)
self.labkorr = Label(self.userf, relief=SUNKEN, width=14, height=2, bg="#AAC4D3", font="Verdana 10 bold", fg="red", text=korr) .grid(row=r,column=2)
self.butk = Button(self.userf, relief=RAISED, width=4, height=1, bg='green', text='kommen', command=self.buttonk).grid(row=r,column=3)
r = r + 1 + 2 + 3 + 4 + 5 + 6 + 7
print user,korr,"dienstgang"
elif (stat == 'm'):
self.labuser = Label(self.userf, relief=RAISED, width=15, height=2, bg="#AAC4D3", font = "Verdana 10 bold", text=name) .grid(row=r,column=0)
self.labstat = Label(self.userf, relief=SUNKEN, width=12, height=2, bg="yellow", font = "Verdana 10 bold", text="mittag") .grid(row=r,column=1)
self.labkorr = Label(self.userf, relief=SUNKEN, width=14, height=2, bg="#AAC4D3", font="Verdana 10 bold", fg="red", text=korr) .grid(row=r,column=2)
self.butk = Button(self.userf, relief=RAISED, width=4, height=1, bg='green', text='kommen', command=self.buttonk).grid(row=r,column=3)
r = r + 1 + 2 + 3 + 4 + 5 + 6 + 7
print user,korr,"mittag"
elif (stat == 'k'):
self.labuser = Label(self.userf, relief=RAISED, width=15, height=2, bg="#AAC4D3", font = "Verdana 10 bold", text=name) .grid(row=r,column=0)
self.labstat = Label(self.userf, relief=SUNKEN, width=12, height=2, bg="green", font = "Verdana 10 bold", text="anwesend") .grid(row=r,column=1)
self.labkorr = Label(self.userf, relief=SUNKEN, width=14, height=2, bg="#AAC4D3", font="Verdana 10 bold", fg="red", text=korr) .grid(row=r,column=2)
self.butp = Button(self.userf, relief=RAISED, width=2, height=1, bg='yellow', text='pause', command=self.buttonp).grid(row=r,column=4)
self.butm = Button(self.userf, relief=RAISED, width=2, height=1, bg='yellow', text='mittag', command=self.buttonm).grid(row=r,column=5)
self.butd = Button(self.userf, relief=RAISED, width=6, height=1, bg='yellow', text='dienstgang', command=self.buttond).grid(row=r,column=6)
self.butg = Button(self.userf, relief=RAISED, width=2, height=1, bg='red', text='gehen', command=self.buttong).grid(row=r,column=7)
r = r + 1 + 2 + 3 + 4 + 5 + 6 + 7
print user,korr,"anwesend"
elif (stat == '!'):
self.labuser = Label(self.userf, relief=GROOVE, width=15, height=2, bg="#AAC4D3", font = "Verdana 9 bold", text=name) .grid(row=r,column=0)
self.labkorr = Label(self.userf, relief=SUNKEN, width=14, height=2, bg="#AAC4D3", font="Verdana 9 bold", fg="red", text=korr) .grid(row=r,column=1)
r = r + 1 + 2 + 3 + 4 + 5 + 6 + 7
print user,korr,""
cursor.close()
db.close()
#self.statusframe.after(2000, self.run)
self.tick()
self.fenster.mainloop()
####### hier ist mein problem ich bekomme den update nicht hin
def updateGUI(self):
a = b # hier nichts
#self.fenster.after(1000, self.updateGUI)
#msg = "Data is True" if data else "Data is False"
#self.lbl["text"] = msg
#self.fenster.update()
#self.lbl.after(1000, self.updateGUI)
#self.run.after(2000, updateGUI)
def tick(self):
global time1
self.time2 = time.strftime('%H:%M:%S')
if self.time2 != time1:
time1 = self.time2
self.clock.config(text=self.time2)
self.clock.after(1000, self.tick)
def __init__(self):
self.fenster = Tk()
#self.lbl = Label(self.fenster, text="")
title = self.fenster.title('ZEITERFASSUNG')
self.fenster.geometry("657x520+24+10")
self.fenster.configure(background='#AAC4D3')
### Frame oben datum und Uhrzeit
self.datzeit = Frame(self.fenster, width = 655, bg="green", relief = "sunken", border=2)
self.datzeit.pack(fill='x', pady = "1")
self.labdat = Label(self.datzeit, relief = GROOVE, bg = "white", font = "Verdana 10 bold", text = dat) #.grid(row = 0,column = 0, padx = 150)
self.labdat.pack(side = RIGHT)
self.clock = Label(self.datzeit, width=10, relief = GROOVE, bg = "white", font = "Verdana 10 bold")
self.clock.pack(side = RIGHT)#side=LEFT
### Frame unten Alarm
self.alarm = Frame(self.fenster, width = 657, height=50, bg = "yellow", relief = "sunken", border=2)
self.alarm.pack(fill='x',side=BOTTOM)
self.labalarm = Label(self.alarm, relief = RAISED, width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", text = "Alarmanlage")
self.labalarm.pack(side=LEFT)
self.butaus = Button(self.alarm, relief = RAISED, width = 3, height = 2, bg = 'red', text = "aus", command = aus)
self.butaus.pack(side=RIGHT)
self.butan = Button(self.alarm, relief = RAISED, width = 3, height = 2, bg = 'green', text = 'an', command = an)
self.butan.pack(side=RIGHT)
self.updateGUI()
if __name__ == "__main__":
Gui().run()