listen zugriff

Fragen zu Tkinter.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

wie kann ich auserhalb von der funktion "stati" auf line oder test1 oder test2 zugreifen und es im gui als label ausgeben

Code: Alles auswählen

def stati(self):
    if ("statuse.txt"):
	     f = open('statuse.txt','r')
	     for line in f:
	        #line = line[:-1].split(",")
		line = line.split("'")
                test1 = line[1]
                test2 = line[2]
	f.close()
Zuletzt geändert von Hyperion am Mittwoch 16. September 2015, 14:04, insgesamt 1-mal geändert.
Grund: Code in Python Code Tags gesetzt.
BlackJack

@ganja: Gar nicht. Du musst die Werte entweder als Rückgabewerte an den Aufrufer übermitteln oder an das Objekt binden auf dem die Methode aufgerufen wurde.

Das ``if`` macht keinen Sinn weil diese nicht-leere Zeichenkette immer ”wahr” ist. Ausserdem gehören die Klammern dort nicht hin.

Dateien sollte man mit der ``with``-Anweisung öffnen damit sie in jedem Fall geschlossen werden, also auch wenn zwischen dem `open()` und dem `close()` unerwartete Probleme auftreten, beispielsweise weil die Zeilen in der Datei nicht dem entsprechen was die Verarbeitung erwartet.

Der Code hat am Ende die Werte der letzten verarbeiteten Zeile aus der Datei, es wird aber jede Zeile verarbeitet. Es würde wohl mehr Sinn machen erst die letzte Zeile zu ermitteln und dann nur die zu Verarbeiten. Und bitte auch den Fall bedenken das die Datei leer ist!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Nein, nicht direkt, da diese Objekte ja nur im lokalen Scope der Funktion ``stati`` sichtbar sind. Du musst Dir einfach die gewünschten Objekte von der Funktion als Rückgabewerte zurückliefern lassen, so dass Du sie dann beim Erstellen (Modifizieren) des Labels nutzen kannst.

Edit: Ich sehe gerade, dass es sich um eine Methode handelt... dann könntest Du die Werte auch in einem Attribut speichern (Wobei IO und Logik imho eher getrennt sein sollten. Es ist also sonderbar, dass Du das Auslesen offenbar in einer Klasse machst, die primär etwas anderes tut)

Der Code an sich hat auch noch Schwächen:

- Dateien sollte man immer mittels ``with`` öffnen, damit sie automatisch geschlossen werden.
- Einrückungen sollten immer *vier Spaces* sein!
- Die Bedingung in Zeile zwei ist obsolet, da immer wahr:

Code: Alles auswählen

bool("string-literal")
> True
Ich komme damit ungetestet auf folgendes:

Code: Alles auswählen

def get_status(self):
    pairs = []
    with open("statuse.txt") as f:
        for row in f:
            columns = row.split("'")
            pairs.append((columns[1], columns[2]))
    return pairs
Btw: Der Plural von Status ist... tada... auch Status! Das liegt an der U-Deklination des Lateinischen, bei der eben das "us" im Nominativ Plural erhalten bleibt. (Gesprochen aber mit langem "u" im Plural, also "Statuuuuuuuuus")
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import Tkinter as tk
import time
import datetime

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 = ''


class Test:
	def __init__(self):
		#r = 0 			#wird später für Label grid benötigt 
		self.fenster = tk.Tk()
		self.fenster.title('ZEITERFASSUNG')
		self.fenster.geometry("800x600")#+24+10
		self.fenster.configure(background='#AAC4D3')
		
		### frame datzeit
		self.datzeit = tk.Frame(self.fenster, width = 655, height = 30, bg = "yellow", relief = "sunken", border = 2) ##AAC4D3
		self.datzeit.pack(fill='x', pady = "1")#side = 'top'
		#lbl datzeit
		self.labdat = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold", text = dat)
		self.labdat.pack(side = "right")
		self.clock = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold")
		self.clock.pack(side = "right")#side=LEFT
		

		### frame mitte label and buttons
		self.statf = tk.Frame(self.fenster, width = 655, height = 450, bg = "red", relief = "flat", border = 2)
		self.statf.pack(fill='x', pady = "1")

		# if test3 = 'g'
		# hier Labels
		# Label ---- test1
		# Label ---- test2
		# Label ---- test3
		# Label ---- test4
		
		self.fenster.after(2000, self.label_update)
		self.fenster.mainloop()

	
	def get_status(self):
		pairs = []
		with open("statuse.txt") as f:
			for row in f:
				columns = row.split("'")
				pairs.append((columns[1], columns[3], columns[5], columns[7]))
			return pairs
	
	def tick(self):
		global zeit
		self.time2 = time.strftime('%H:%M:%S')
		if self.time2 != zeit:
			zeit = self.time2
			self.clock.config(text = self.time2)
		self.clock.after(1000, self.tick)
	
	def label_update(self):
		self.tick()

		self.get_status()
		self.fenster.after(2000, self.get_status)
		
		# hier update vo Labels test1 ...
		# hier update vo Labels test2 ...
		# hier update vo Labels test3 ...
		# hier update vo Labels test4 ...
		
		self.fenster.after(2000, self.label_update)
     
def main():
	app = Test()
	
if __name__ == '__main__':
	main()
Vielen Dank
an alle die sich beteiligen. Ich muß noch jede menge lernen. mit gans großer warscheinlichkeit werde ich noch fragen haben.
Noch einmal Vielen Dank
Zuletzt geändert von Anonymous am Mittwoch 16. September 2015, 14:40, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

wie formatiere ich den code ins python???
Danke
BlackJack

@ganja: Als Ergänzung vielleicht noch: Das zuletzt von Hyperion gezeigte ist dann eigentlich keine Methode mehr weil das Objekt nicht verwendet wird auf dem diese ”Methode” definiert ist. Da sollte man dann entweder eine Funktion draus machen, oder mit ``@staticmethod`` zeigen dass das so sein soll.

Für die Formatierung gibt's code-Tags. Da ist eine Schaltfläche über dem Textfeld für den Beitragstext wenn man die nicht von Hand eingeben möchte.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

jetzt bin ich wieder total verunsichert worden von dir blackjakck, wirklich ich kenne mich nicht aus in python, ich lerne und versuche.
Ich muss jetzt erst mal schauen das pairs ansprechen kann, leider kein erfolg.

wie kann ich jetzt auf *columns[1]* in get_status() zugreifen, wie kann ich jetzt daraus ein label machen?

Danke
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Da ich nicht weiter komme, und sehr viele Wissens lücken bestehen.
Suche ich jemanden der mir hilft, die Wissens lücken zu schliessen und mein vorhaben zu verwirklichen, wenn jemand zeit und lust hat mir zu helfen, mich zu unterstützen, den ich Mister Miyagi :) nennen darf, bitte melden damit wir das finanzielle abklären und uns einig werden(Mister Miyagi sollte nur Ratgeber sein, und eventuell ein Beispiel liefern, wenn ich selber nicht weiter komme).
Ich suche Nachhilfe in Python Tkinter, gegen Bezahlung. Sollte ich gegen irgendwelche Foren regeln verstossen haben, bitte löschen und Entschuldigung.

Danke
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Guten Morgen
ich bin weiter gekommen, zumindest denke ich das, jetzt habe ich noch das Problem mit den Labels, es sollen Labels erstellt werden wenn self.stat[3] == 'g', dann sollten Labels mit dem inhalt von self.stat[7] das wären dann etwa 5 Labels, bei self.stat[3] == 'k' wären es self.stat[7] 5 Labels usw., die sollen sich aktualisieren sobald self.stat[3] sich ändert, ich schafe es nur den letzten inhalt von self.stat[7] als Label zu bekommen. Hat jemand eine idee?
Hier mal code und inhalt der liste, vielleicht hat jemand eine idee.

2L usw unintersant
'xxx' self.stat[1] brauche ich im moment nicht
'k' self.stat[3] wird gebraucht
'k' self.stat[5] wird gebraucht
'xxxx xxxx' self.stat[7] wird gebraucht

(2L, 'xxx', 'k', '', 'xxxxxx xxxx')
(3L, 'xxx', 'k', '', 'xxxxx xxxxxxx')
(4L, 'xxx', 'p', '', 'xxxxx xxxxxxxxx')
(5L, 'xxx', 'g', '', 'xxxxxx xxxx')
(6L, 'xxx', 'g', '', 'xxxx xxxxx xxx')
(7L, 'xxx', 'g', '', 'xxxxx xxxxx')
(8L, 'xxx', 'g', '', 'xxxxxx xxxxxx')
(9L, 'xxx', 'k', '', 'xxxxx xxxxx')
(10L, 'xxx', 'g', 'k', 'xxxx xxx')
(11L, 'xxx', 'g', '', 'xxxxx xxxxxxx')
(12L, 'xxx', 'g', 'k', 'xxxxxxx xxxxxxxxx')
(13L, 'xxx', 'k', '', 'xxxx xxxxxxx')
(14L, 'xxx', 'k', '', 'xxxx xxxxxxxx')
(15L, 'xxx', 'p', '', 'xxxxxx xxxxx')

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import Tkinter as tk
import time
import datetime
#import MySQLdb


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 = ''

class Test:
	def get_status(self):
		stati = []
		with open("statuse.txt") as f:
			for row in f:
				columns = row.split("'")
				stati.append((columns))
				#stati.append((columns[1], columns[3], columns[5], columns[7]))
		return stati

	def tick(self):
		global zeit
		self.time2 = time.strftime('%H:%M:%S')
		if self.time2 != zeit:
			zeit = self.time2
			self.clock.config(text = self.time2)
		self.clock.after(1000, self.tick)
	
	def __init__(self):
		r = 0
		
		self.fenster = tk.Tk()
		self.fenster.title('ZEITERFASSUNG')
		self.fenster.geometry("800x600")#+24+10
		self.fenster.configure(background='#AAC4D3')
		
		### frame datzeit
		self.datzeit = tk.Frame(self.fenster, width = 655, height = 30, bg = "yellow", relief = "sunken", border = 2) ##AAC4D3
		self.datzeit.pack(fill='x', pady = "1")#side = 'top'
		#labels datzeit
		self.labdat = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold", text = dat)
		self.labdat.pack(side = "right")
		self.clock = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold")
		self.clock.pack(side = "right")#side=LEFT
		

		### frame mitte label and buttons
		self.statf = tk.Frame(self.fenster, width = 655, height = 450, bg = "red", relief = "flat", border = 2)
		self.statf.pack(fill='x', pady = "1")
		

		self.fenster.after(2000, self.label_update)
		self.fenster.mainloop()
        
	def label_update(self):
		self.tick()
		
		self.item = self.get_status()
		for self.stat in self.item:
			print self.stat[7], self.stat[3],self.stat[5]
			#self.lbn.config(text = self.stat[7])
			#self.lbs.config(text = self.stat[3])
			#self.lbk.config(text = self.stat[5])
		
		### damit liste alle 2 sec eingelesen wird
		self.fenster.after(2000, self.get_status)
		
		self.fenster.after(2000, self.label_update)
     
def main():
	app = Test()
	
if __name__ == '__main__':
	main()
BlackJack

@ganja: Als erstes mal solltest Du das Datenformat ändern. Das aufteilen an ' kam mir sowieso schon seltsam vor und jetzt weiss ich auch warum: Eine Datei in der die Zeichenkettenrepräsentation von Tupeln gespeichert ist, ist kein sinnvolles Dateiformat zum weiterverarbeiten. Spätestens wenn innerhalb der Daten regulär ' vorkommen, fällt dieser Ansatz auf die Nase. Der Fenstertitel und das eine Leerzeichen bei den 'x'en im letzten Element lassen Namen vermuten. Es gibt Leute die ein ' im Namen haben! Siehe auch: https://twitter.com/hyPiRion/status/642293507680505856 :-)

Wenn tabellenartig, dann ist der erste Gedanke meistens das CSV-Format zu verwenden. Die Standardbibliothek hat da ein Modul für.

Als nächstes solltest Du aufhören jeden Sch* an das Objekt zu binden. Da gehören nur Attribute hin die den Zustands des Objekts ausmachen und die sollten auch alle in der `__init__()` eingeführt werden.

Dann übertreibst Du es mit `after()` ein bisschen. Da werden Aufrufe gemacht die sinnlos sind, weil sie keinen Effekt haben, und welche die dazu führen das das immer mehr und mehr und mehr Aufrufe von `tick()` werden. Das macht keinen Sinn und wird auch irgendwann zu Problemen führen.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Ok, ich werde versuchen eins nach einander abzuarbeiten was bemengelt wurde.
Als erstes wird jetzt die liste erstellt, mit separtem script holt die daten aus der DB, und speichert sie in statuse.csv
((2L, 'xxx', 'k', '', 'xxxxxx xxx'), (3L, 'xxx', 'k', '', 'xxxxx xxxxx'), (4L, 'xxx', 'g', '', 'xxxxx xxxxxxx'), (5L, 'xxx', 'g', '', 'xxxxxx xxxxx'), (usw))

Code: Alles auswählen

with open('statuse.csv', 'w') as f:
    #f.write(str(st))
    f.write("\n".join(map(lambda x: str(x), [row])))
hier mit wird die liste wieder eingelesen

Code: Alles auswählen

def get_status(self):
    stati = []
    with open('statuse.csv', 'rb') as csvfile:
        #spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
        reader = csv.reader(csvfile, delimiter=':', quoting=csv.QUOTE_NONE)
        for row in reader:
            #print row
            stati.append((row))
     return stati
jetz muss ich schauen das ich alle namen aus der liste ausgebe.

Vielen Dank Black Jack
wie gesagt ich versuche alles was bemengelt wurde nach einander abzuarbeiten, aber es dauert halt etwas länger.
p.s. probleme mit dem tick() aufruf habe ich schon bekommen, die cpu auslastung stieg stetig, habe ich raus genommen und mit self.clock.after(1000, self.tick) im label_update ersetzt, im moment keine cpu auslastung aber ich weiß nicht ob ich es an der richtigen stelle habe.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@ganja: zum Schreiben von csv-Dateien gibt es ein Modul in der Standardbibliothek.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Sirius3 ich glaube ich habe das verstanden ich habe es importiert import csv, oder habe ich jetzt etwas wieder total falsch verstanden?
Black Jack könnte ich nicht für den anfang mit tupel arbeiten und wenn ich es kann dannn mit listen, im moment kann ich auf kein einziges item in der liste zu greifen, mit print nur ganze liste, für mich war das mit den tupel einfacher, natürlich möchte ich es richtig machen, aber wennn es mit tupel für den anfang geht würde ich tupel vorziehen.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@ganja: Du schreibst in eine Datei mit der Endung .csv die Repräsentation von Listen, statt dass Du das csv-Modul zum Schreiben verwendest. Wo ist jetzt genau das Problem mit den Tupeln und Listen? Meist ist es egal, ob Daten in Tuplen oder Listen stehen.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Ich habe jetzt nach einem ähnlichen bsp gesucht, und habe etwas gefunden, ich möchte nicht das csv modul benutzen benutzen.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb
import time
#import pickle
#import csv

def statuse():
	while statuse != 0:
		db=MySQLdb.connect("1xxxxxx","xxx","xxx","xxxx")
		cursor = db.cursor()

		query = "SELECT idx, user, status, korrektur, name  FROM users ORDER BY idx"
		cursor.execute(query)
		row = cursor.fetchall()

		with open('statuse.txt', 'w') as f:
			f.write("\n".join(map(lambda x: str(x), (row)))) #typel
		time.sleep(2)
statuse()
so erstelle ich statuse.txt
(brauche ich nicht, 'user brauche ich', 'status brauche ich', 'sonstiges brauche ich', 'name brauche ich')

(2L, 'xxx', 'k', '', 'xxxxx xxxxx')
(3L, 'xxx', 'k', '', 'xxxxx xxxxxx')
(4L, 'xxx', 'g', '', 'xxxxxxxx xxxxxxx')
(5L, 'xxx', 'g', '', 'xxxx xxxxxx')
usw


Nach dem statuse.txt erstellt wurde kann ich in def get_status(self) darauf zugreifen,
Problem 1 im return steht dann nur der letzte eintrag aus dem tupel, (erledigt)
Problem 2 wie und wo greife ich dann auf get_status(self) das alle einträge aus statuse.txt angezeiget werden und aus diesen die entsprechenden Labels erstellt werden (halb erledigt, zugrif geht aber wo greift man da darauf richtig drauf, im init ????)
Problem 3 in def label_update(self) wird nur aktualisiert d.h Labels muß ich im init erstelllen oder?
Ich möcht nur das es mal tut, danach mach ich es richtig wie von euch allen angesprochen, warscheinlich ist mein verständnis für OOP noch im keller, da muß noch viel geübt werden. Wie gesagt es soll nur mal richtig tun.

p.s macht man mehrere files so wie im moment oder macht man ein file und da wird dann auf die DB zugegrifen und listen erstellt usw, wie ist der richtigfe weg?

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import Tkinter as tk
import time
import datetime
#import csv

ts = time.time()
sec = int(ts)
dat = time.strftime('%Y-%m-%d')
zeit = time.strftime('%H:%M:%S')
zeit1 = time.strftime('%H')
time1 = ''

class Counter:
	def __init__(self):
		self.t = 0
		
	def increaseT(self):
		self.t += 1
	
	def get_status(self):
		stati = []
		with open("statuse.txt") as f:
			for row in f:
				columns = row.split("'")
				stati.append((columns))
		return stati
	
	#geht im moment nicht
	#def tick(self):
	#	global zeit
	#	self.time2 = time.strftime('%H:%M:%S')
	#	if self.time2 != zeit:
	#		zeit = self.time2
	#		self.clock.config(text = self.time2)
	#	self.clock.after(1000, self.tick)
		
class AppGUI:
	def __init__(self):
		r = 0
		self.fenster = tk.Tk()
		self.fenster.title('ZEITERFASSUNG')
		self.fenster.geometry("800x600")#+24+10
		self.fenster.configure(background='#AAC4D3')
		
		self.c = Counter()
		
		### frame datzeit
		self.datzeit = tk.Frame(self.fenster, width = 655, height = 30, bg = "yellow", relief = "sunken", border = 2) ##AAC4D3
		self.datzeit.pack(fill='x', pady = "1")#side = 'top'
		#lbl datzeit
		self.labdat = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold", text = dat)
		self.labdat.pack(side = "right")
		self.clock = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold")
		self.clock.pack(side = "right")#side=LEFT
		
		
		### frame mitte label and buttons
		self.statf = tk.Frame(self.fenster, width = 655, height = 450, bg = "red", relief = "flat", border = 2)
		self.statf.pack(fill='x', pady = "1")
		
		######## hier meine labels
		#if stat == 'x':
			#name 
			#stat 
			#korr
		#elif stat == 'x':
			#name 
			#stat 
			#korr
		#elif stat == 'x':
			#name 
			#stat 
			#korr
		#elif stat == 'x':
			#name 
			#stat 
			#korr
		
		self.label = tk.Label(self.fenster, font = ("Arial", "30"))
		self.label.pack()
		self.label.config(text = str(self.c.t))
		
		###
		self.fenster.after(2000, self.label_update)
		self.fenster.mainloop()
        
	def label_update(self):
		self.c.increaseT()
		print("label update")
		
		for stat in self.c.get_status():
			print stat[7]

		self.label.config(text = str(self.c.t))
		self.fenster.after(2000, self.label_update)
     
def main():
	app = AppGUI()
	
if __name__ == '__main__':
	main()
Danke
Gruß
ganja
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@ganja: Gibt es irgend einen nachvollziehbaren Grund, warum Du ein Modul, das in der Standardbibliothek ist, das genau für solche Problem, wie Du es hast, geschaffen wurde, das einfach zu benutzen ist, das fehlerfrei ist, nicht zu benutzen und statt dessen einen komplizierten, fehlerhaften Murx zu nehmen?

Was hat die get_status-Funktion in der Klasse Counter zu suchen? Counter gibt es bereits als itertools.count fertig.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

unkentniss, deshalb ist es da. Hab gedacht trennen logic und funktoionalitet, einfach probiert.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@ganja: mit Unkenntnis kannst Du Dich nicht rausreden, weil Dir hier jeder das csv-Modul empfohlen hat.
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Ok, für mich ist es einfacher so gewesen, ohne das csv modul, ich habe verstanden was ich tue, grössten teils, ich kann es noch mal mit dem csv modul versuchen muß aber jetzt mich erst einlesen und mir beispiele anschauen, die appGui habe ich irgend wo im netzt gefunden und dachte ich kann es an meine bedürfnise anpassen deshalb stehen da noch

Code: Alles auswählen

[
class Counter:
	def __init__(self):
		self.t = 0
		
	def increaseT(self):
		self.t += 1
/Code]
damit ich sehe wo was passiert wenn ich etwas ändere oder was die classe count macht, jetzt suche ich mal das csv modul und versuche es damit, aber wie gesagt so bekomme ich die statuse und kann sie auch weiter vgerarbeiten, nur  die Labels bereiten mir noch probleme, aber gut, csv modul. Wie gesagt ich lerne in dem ich es probire und tue.

Danke trotdztdem
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Ist njetzt immer noch allles falsch, benutze ich das csv modul nicht richtig, so bekomme ich meine labels aber ich weis nicht wie ich die jetzt aktualiesieren lassan kann, obwohl
def label_update(self): vorhanden, und eigentlich müßte die get_statuse auch aktualisiert werden.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import Tkinter as tk
import time
import datetime
import csv

ts = time.time()
sec = int(ts)
dat = time.strftime('%Y-%m-%d')
zeit = time.strftime('%H:%M:%S')
zeit1 = time.strftime('%H')
time1 = ''

class AppGUI:
	def get_status(self):
		stati = []
		with open('statuse.csv', 'rb') as csvfile:
			reader = csv.reader(csvfile, delimiter="'", quoting=csv.QUOTE_NONE)
			for row in reader:
				stati.append(row)
		return stati
	
	def tick(self):
		global zeit
		self.time2 = time.strftime('%H:%M:%S')
		if self.time2 != zeit:
			zeit = self.time2
			self.clock.config(text = self.time2)
		self.clock.after(1000, self.tick)

	def __init__(self):
		r = 0
		self.fenster = tk.Tk()
		self.fenster.title('ZEITERFASSUNG')
		self.fenster.geometry("800x600")#+24+10
		self.fenster.configure(background='#AAC4D3')

		self.datzeit = tk.Frame(self.fenster, width = 655, height = 30, bg = "yellow", relief = "sunken", border = 2) ##AAC4D3
		self.datzeit.pack(fill='x', pady = "1")#side = 'top'
		#lbl datzeit
		self.labdat = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold", text = dat)
		self.labdat.pack(side = "right")
		self.clock = tk.Label(self.datzeit, relief = "groove", width = 10, bg = "white", font = "Verdana 10 bold")
		self.clock.pack(side = "right")#side=LEFT
		
		
		### frame mitte label and buttons
		self.statf = tk.Frame(self.fenster, width = 655, height = 450, bg = "red", relief = "flat", border = 2)
		self.statf.pack(fill='x', pady = "1")
		
		for stat in self.get_status():
			self.name = stat[7]
			self.stat = stat[3]
			self.korr = stat[5]
			print self.name,"1111111"
			if self.korr == 'k' :
					self.korr = "ZEITKORREKTUR" 

			if self.stat == 'g' :
				self.lbn = tk.Label(self.statf, relief = "raised", width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold")
				self.lbn.grid(row = r, column = 0)
				self.lbn.config(text = str(self.name))
				self.lbs = tk.Label(self.statf, relief = "sunken", width = 12, height = 2, bg = "red", font = "Verdana 10 bold", text = "abwesend")
				self.lbs.grid(row = r, column = 1)
				self.lbs.config(text = str(self.stat))
				self.lbk = tk.Label(self.statf, relief = "sunken", width = 14, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", fg = "red", text = self.korr)
				self.lbk.grid(row = r, column = 2)
				self.lbk.config(text = str(self.korr))
				r += 1
			elif self.stat == 'p' :
				self.lbn = tk.Label(self.statf, relief = "raised", width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold")
				self.lbn.grid(row = r, column = 0)
				self.lbn.config(text = str(self.name))
				self.lbs = tk.Label(self.statf, relief = "sunken", width = 12, height = 2, bg = "yellow", font = "Verdana 10 bold", text = "abwesend")
				self.lbs.grid(row = r, column = 1)
				self.lbs.config(text = str(self.stat))
				self.lbk = tk.Label(self.statf, relief = "sunken", width = 14, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", fg = "red", text = self.korr)
				self.lbk.grid(row = r, column = 2)
				self.lbk.config(text = str(self.korr))
				r += 1

			elif self.stat == 'd' :
				self.lbn = tk.Label(self.statf, relief = "raised", width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold")
				self.lbn.grid(row = r, column = 0)
				self.lbn.config(text = str(self.name))
				self.lbs = tk.Label(self.statf, relief = "sunken", width = 12, height = 2, bg = "blue", font = "Verdana 10 bold", text = "abwesend")
				self.lbs.grid(row = r, column = 1)
				self.lbs.config(text = str(self.stat))
				self.lbk = tk.Label(self.statf, relief = "sunken", width = 14, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", fg = "red", text = self.korr)
				self.lbk.grid(row = r, column = 2)
				self.lbk.config(text = str(self.korr))
				r += 1
			elif self.stat == 'm' :
				self.lbn = tk.Label(self.statf, relief = "raised", width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold")
				self.lbn.grid(row = r, column = 0)
				self.lbn.config(text = str(self.name))
				self.lbs = tk.Label(self.statf, relief = "sunken", width = 12, height = 2, bg = "yellow", font = "Verdana 10 bold", text = "abwesend")
				self.lbs.grid(row = r, column = 1)
				self.lbs.config(text = str(self.stat))
				self.lbk = tk.Label(self.statf, relief = "sunken", width = 14, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", fg = "red", text = self.korr)
				self.lbk.grid(row = r, column = 2)
				self.lbk.config(text = str(self.korr))
				r += 1
			elif self.stat == 'k' :
				self.lbn = tk.Label(self.statf, relief = "raised", width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold")
				self.lbn.grid(row = r, column = 0)
				self.lbn.config(text = str(self.name))
				self.lbs = tk.Label(self.statf, relief = "sunken", width = 12, height = 2, bg = "green", font = "Verdana 10 bold", text = "abwesend")
				self.lbs.grid(row = r, column = 1)
				self.lbs.config(text = str(self.stat))
				self.lbk = tk.Label(self.statf, relief = "sunken", width = 14, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", fg = "red", text = self.korr)
				self.lbk.grid(row = r, column = 2)
				self.lbk.config(text = str(self.korr))
				r += 1
			elif self.stat == '!' :
				self.lbn = tk.Label(self.statf, relief = "raised", width = 15, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold")
				self.lbn.grid(row = r, column = 0)
				self.lbn.config(text = str(self.name))
				self.lbk = tk.Label(self.statf, relief = "sunken", width = 14, height = 2, bg = "#AAC4D3", font = "Verdana 10 bold", fg = "red", text = self.korr)
				self.lbk.grid(row = r, column = 2)
				self.lbk.config(text = str(self.korr))
				r += 1

		self.tick()
		self.fenster.after(2000, self.label_update)
		self.fenster.mainloop()
        
	def label_update(self):
		#### hier Labels aktualisieren, wie?
		self.lbn.config(text = str(self.name))
		#print self.name,"212112"
		self.lbs.config(text = str(self.stat))
		self.lbk.config(text = str(self.korr))

		self.fenster.after(2000, self.label_update)
    
def main():
	app = AppGUI()
	
if __name__ == '__main__':
	main()
Antworten