Witam!
Chciałem sobie napisać prostą aplikację zliczającą wynagrodzenie, godziny itd. w ramach treningu, ponieważ dopiero zaczynam z programowaniem.
Przy pomocy biblioteki TkInter chciałem stworzyć proste GUI, gdzie wyświetlałyby się informacje oraz osobne okienko do dodawania danych i właśnie z tym okienkiem miałem problem.
Klasa odpowiadająca za obsługę danych, może nie jest napisana idealnie oraz nie sprawdza poprawności wprowadzanych danych, ale najbardziej mi chodziło o zapoznanie się z tkinter:
class Praca:
def wczytaj(self):
with open("godziny.txt", 'r') as godz:
x = godz.read()
self.__godz = x.split("\n")
l = len(self.__godz) - 1
del self.__godz[l]
with open("tips.txt", 'r') as tips:
y = tips.read()
self.__tips = y.split("\n")
l = len(self.__tips) - 1
del self.__tips[l]
with open("wynagrodzenie.txt", 'r') as hajs:
z = hajs.read()
self.__hajs = z.split("\n")
l = len(self.__hajs) - 1
del self.__hajs[l]
with open("dni.txt", 'r') as dni:
d = dni.read()
self.__dni = d.split("\n")
l = len(self.__dni) - 1
del self.__dni[l]
def zapisz(self):
with open("godziny.txt", 'w') as godz:
for i in self.__godz:
godz.write(i+"\n")
with open("tips.txt", 'w') as tips:
for i in self.__tips:
tips.write(i+"\n")
with open("wynagrodzenie.txt", 'w') as hajs:
for i in self.__hajs:
hajs.write(i+"\n")
with open("dni.txt", 'w') as dni:
for i in self.__dni:
dni.write(i+"\n")
def dodaj(self,godziny,tips,dni):
self.__godz.append(str(godziny))
self.__hajs.append(str(16*float(godziny)))
self.__tips.append(str(tips))
self.__dni.append(str(dni))
def suma(self):
s_nap = 0
s_wyn = 0
s_wyn_n = 0
s_godz = 0
for i in self.__tips:
s_nap+=float(i)
for i in self.__hajs:
s_wyn+=float(i)
for i in self.__godz:
s_godz+=float(i)
s_wyn_n = s_nap + s_wyn
return [s_nap, s_wyn, s_wyn_n, s_godz]
Kod GUI:
import tkinter as tk
import PIL
from Wynagrodzenie import Praca
work = Praca()
def Dodaj_dane(event):
godziny_var = tk.StringVar()
data_var = tk.StringVar()
napiwki_var = tk.StringVar()
#okno wyskakujace, zeby dodac dane
okno = tk.Tk()
okno.geometry("400x300")
okno.title("Dodaj dane")
topFrame = tk.Frame(okno)
topFrame.place(x=0, y=70)
botFrame = tk.Frame(okno)
botFrame.pack(side=tk.BOTTOM)
tk.Label(topFrame, text='Data').grid(row=1, column=1, padx=4, pady=4)
tk.Label(topFrame, text='Godziny').grid(row=1, column=2, padx=4, pady=4)
tk.Label(topFrame, text='Napiwki').grid(row=1, column=3, padx=4, pady=4)
data = tk.Entry(topFrame, textvariable=data_var)
data.grid(row=2, column=1, padx=4, pady=4)
godziny = tk.Entry(topFrame, textvariable=godziny_var)
godziny.grid(row=2, column=2, padx=4, pady=4)
napiwki = tk.Entry(topFrame, textvariable=napiwki_var)
napiwki.grid(row=2, column=3, padx=4, pady=4)
dodaj = tk.Button(botFrame, text="Dodaj")
dodaj.grid(row=1, column=2, padx=2, pady=40)
dodaj.bind("<Button-1>", lambda g=godziny_var.get(),t=napiwki_var.get(), d=data_var.get(): work.dodaj(g, t, d))
#dodaj.bind("<Button-1>", work.dodaj(godziny_var.get(), napiwki_var.get(), data_var.get()))
okno.mainloop()
#Glowne okno
root = tk.Tk()
root.geometry("600x300")
root.title("Wynagrodzenie")
work.wczytaj()
print(work.suma())
b = tk.Button(root, text="Dodanie danych")
b.bind("<Button-1>",Dodaj_dane)
b.pack(side = tk.BOTTOM)
root.mainloop()
Nie rozumiem komunikatu o błędzie, który wyrzuca mi program, bo wpisując 10 w rubrykę godziny wszystko powinno działać i nie wiem do końca jak sobie z tym poradzić.
"TypeError: float() argument must be a string or a number, not 'Event'"
Z góry dziękuję za pomoc!