Durch den EOF-Fehler wurde es ja noch nicht getestet und ist nicht ganz fertig. Beim Neustart soll es die Datei.txt auslesen und die Werte in die Entries von der Seriennummer und Ware eintragen. Bei parse_form kann der Rückgabewert ein False oder die Liste von der Seriennummer und sein. Bei False soll es alles abbrechen und wenn es ungleich False ist soll die Liste mit der Seriennummer und Ware gesendet werden. Momentan teste ich nur einige Sachen. Später sollen die Werte der Variablen an die jetzige Hauptdatei geschickt werden bzw. durch den Aufruf der Funktion in eine Variable gespeichert werden.
Ich habe nur gedacht das result gespeichert werden soll bevor die Methode ein return schickt.
Eigentlich soll es die Datei auslesen und die Werte in die Entries eintragen. Aber beim ersten Mal muss ich ja zuerst eine Datei erstellen damit die Datei ausgelesen werden kann. Wenn er eine leere Datei ausliest soll halt nichts in die Entry-Widgets eingetragen werden. Das Problem ist dass aber ein Fehler erscheint.
Wozu ist dann Pickel was kann ich sonst verwenden?
Es stehen bestimmte Werte wie die Seriennummer, Gewicht, wieviele Kanäle usw. Somit soll das Hauptprogramm blockieren bis die Werte aus der GUI gesendet werden. Wenn das Hauptprogramm diese Werte hat soll das Hauptprogramm weiterlaufen und in eine while-Loop wo Sachen berechnet werden bzw. der Speicherort verwendet wird um eine csv mit den jeweiligen Daten verwendet wird usw.
Hier ist der jetzige Code:
Code: Alles auswählen
import tkinter as tk
from tkinter import messagebox
from time import localtime,strftime
import pickle
class Fenster:
def __init__(self):
self.window = tk.Tk()
tk.Label(self.window, text="Seriennummer:").grid(row=0, column=0)
tk.Label(self.window, text="Ware:").grid(row=0, column=1)
self.seriennummer_ware_entries = []
for row in range(1,6):
entry_seriennummer = tk.Entry(self.window, width=10)
entry_seriennummer.grid(row=row, column=0)
entry_ware = tk.Entry(self.window, width=10)
entry_ware.grid(row=row, column=1)
self.seriennummer_ware_entries.append((entry_seriennummer, entry_ware))
try:
datei=open('datei.txt', 'rb')
liste=pickle.load(datei)
datei.close()
#print('Liste: ')
except FileNotFoundError:
datei=open('datei.txt', 'wb')
datei.close()
self.entry_pfad = tk.Entry(self.window, width=20)
self.entry_pfad.grid(row=7)
self.label_pfad=tk.Label(self.window, text="Pfad: ", justify=tk.LEFT)
self.label_pfad.grid(row=8)
tk.Button(self.window, text='Senden', command=self.senden).grid(row=7, column=1)
def senden(self):
if self.parse_form() != False:
parse_form=self.parse_form()
speichername=self.speichername()
print(self.speichername(), self.parse_form)
return(parse_form, speichername)
def parse_form(self):
text=False
result = []
for seriennummer_entry, ware_entry in self.seriennummer_ware_entries:
seriennummer = seriennummer_entry.get()
ware = ware_entry.get()
if seriennummer=='' and ware=='':
# ignore empty lines
if text==False:
tk.messagebox.showwarning('Warning', 'Fehler 1')
return False
else:
return result
elif seriennummer=='' or ware=='':
tk.messagebox.showwarning('Warning', 'Fehler 2')
return False
else:
text=True
try:
result.append((seriennummer, float(ware)))
speichern=open('datei.txt', 'wb')
liste=pickle.dump(result, speichern)
speichern.close()
#print('Speicher gespchrieben')
except ValueError:
tk.messagebox.showwarning('Warning', 'Fehler 3')
return False
return result
def speichername(self):
zeit=localtime()
datum=strftime("%d-%m-%Y",zeit)
if self.entry_pfad.get()=='':
name=datum
self.entry_pfad.insert(0, name)
self.label_pfad.config(text='Pfad: '+ 'Pfad/' + name + '.csv')
else:
name=self.entry_pfad.get()
if ' ' in name:
name=name.replace(' ', '-')
self.entry_pfad.delete(0,'end')
self.entry_pfad.insert(0, name)
self.label_pfad.config(text='Pfad: ' + 'Pfad/' + name + '.csv')
return name
def main():
fenster = Fenster()
fenster.window.mainloop()
if __name__ == '__main__':
main()