Καλησπέρα.
Το πρόβλημα μου είναι το εξής:
Όταν ανοίγω αρχεία μέσω του προγράμματος το Entry κάτι
παθαίνει και όταν χρησιμοποιώ το backspace για να σβήσω
κάτι τότε με εμφανίζει περίεργα σύμβολα και δεν σβήνει το
περιεχόμενο του entry.
Τρέξτε το πρόγραμμα και δώστε μια τιμή, έπειτα πιέστε το
κουμπί πρόσθεσε.Μετά αποθηκεύστε το και ξανά ανοίξτε το
αρχείο που δημιουργήθηκε. Στην συνέχεια προσπαθήστε να σβήσετε το περιεχόμενο του Entry με το backspace να δείτε
τη θα γίνει.
Δείτε κάποιες εικόνες για να καταλάβετε καλύτερα.
Κώδικας:
# -*- coding: utf-8 -*-
import pickle
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from threading import Thread as thread
names = ["Λιπάσματα", "Κλαδέματα", "Ραντίσματα", "Ρεύματα",
"Πετρέλαια", "Συντήρηση", "Εργάτες", "Παραγωγή"]
values = {}
esoda = 0
paragogikotita = 0
eksoda = 0
running = True
def main():
screen = Tk()
screen.title("Επιχείρηση")
screen.geometry("300x260+300+300")
screen.protocol('WM_DELETE_WINDOW', lambda:Quit(screen))
listValue = StringVar()
numValue = DoubleVar()
#Creating a listbox.
spinbox = Spinbox(screen, from_ = 1, to = 8, width = 5)
spinbox.place(x = 10, y = 30)
#Creatin showValue Label.
showValue = Label(textvariable = listValue, fg = "green")
showValue.place(x = 5, y = 10)
a = thread( target = lambda:updateSpinBox(spinbox, listValue) )
a.start()
#Entry.
Label(text = ":", fg = "red").place(x = 80, y = 30)
entry = Entry(textvariable = numValue, width = 8)
entry.place(x = 100, y = 30)
labels = []
stringVars = []
y_ = 50
for i in range(len(names)):
var = StringVar()
var.set(names[i]+": 0.0")
stringVars.append(var)
labels.append( Label(textvariable = var, fg = "blue") )
labels[i].place(x = 10, y = y_)
y_ += 25
pass
eks = StringVar()
eso = StringVar()
eso.set("Έσοδα: 0.0"+" Ευρώ")
eks.set("Έξοδα: 0.0"+" Ευρώ")
Label(textvariable = eso, fg = "red").place(x = 130, y = 125)
Label(textvariable = eks, fg = "red").place(x = 130, y = 150)
Label(text = "Ευρώ", fg = "red").place(x = 150, y = 30)
#Button.
butt = Button(text = "Πρόσθεσαι", command = lambda:conc(numValue.get(), spinbox.get(), stringVars,
eks), fg = "red")
butt.place(x = 210, y = 28)
butt2 = Button(text = "Έσοδα", command = lambda:findEsoda(eso), fg = "red")
butt2.place(x = 255, y = 135)
#---------------Menu Bar---------------#
menubar = Menu(screen)
file = Menu(menubar, tearoff = 0)
file.add_command(label = "Αποθήκευση...", command = saveFile)
file.add_command(label = "Άνοιγμα Αρχείου...", command = lambda:loadFile(stringVars, eso, eks))
menubar.add_cascade(label = "Αρχείο", menu = file)
screen.config(menu = menubar)
#---------------Menu Bar---------------#
status = Label(screen, text="", bd=1, relief=SUNKEN, anchor=W)
status.pack(side=BOTTOM, fill=X)
screen.mainloop()
pass
def conc(value, spin, stringVars, eks):
global eksoda, values, paragogikotita
if (names[int(spin)-1] in values):
if (int(spin) != 8):
eksoda -= values[names[int(spin)-1]]
pass
else:
paragogikotita -= values[names[int(spin)-1]]
values[names[int(spin)-1]] = value
if (int(spin) != 8):
eksoda += value
pass
else:
paragogikotita+= value
pass
stringVars[int(spin)-1].set(names[int(spin)-1]+": "+str(value))
eks.set("Έξοδα: "+str(eksoda)+" Ευρώ")
def updateSpinBox(spinbox, var):
while running:
var.set(names[int(spinbox.get())-1])
pass
def findEsoda(eso):
global esoda
esoda = paragogikotita - eksoda
eso.set("Έσοδα: "+str(esoda)+" Ευρώ")
pass
def saveFile():
filename = filedialog.asksaveasfilename()
if (filename == ""):
return 0
if (".dat" in filename):
pass
else:
filename += '.dat'
try:
file = open(filename, 'wb')
List = [values, esoda, paragogikotita, eksoda]
pickle.dump(List, file)
file.close()
return 1
except:
messagebox.showerror(title = "Σφάλμα", message = "Δεν μπορείτε να δώσετε αυτό το όνομα.")
return 0
def loadFile(stringVars, eso, eks):
global values, esoda, paragogikotita, eksoda
filename = filedialog.askopenfilename()
if (filename == ""):
return 0
try:
file = open(filename, "rb")
Load = pickle.load(file)
file.close()
values = Load[0]
esoda = Load[1]
paragogikotita = Load[2]
eksoda = Load[3]
for i in range(len(names)):
try:
stringVars[i].set(names[i]+": "+str(values[names[i]]))
pass
except:
break
eso.set("Έσοδα: "+str(esoda)+" Ευρώ")
eks.set("Έξοδα: "+str(eksoda)+" Ευρώ")
pass
except:
messagebox.showerror(title = "Σφάλμα", message = "Δεν μπορείτε ανοίξετε αυτό το αρχείο.")
def Quit(screen):
global running
running = False
screen.destroy()
quit()
return 0
if (__name__ == "__main__"):
main()