-
babaliaris1
-
-
Αποσυνδεμένος
-
python
-
- Δημοσιεύσεις: 445
- Ληφθείσες Ευχαριστίες 75
-
-
|
cps έγραψε:
Έχω φτιάξει αυτή τη φόρμα (δεν τη γράφω ολόκληρη, αλλά ένα μέρος)
#!/usr/bin/env python3
from tkinter import*
import os
import sqlite3
root=Tk()
#Διαστάσεις
root.title('Πελατολόγιο')
root.geometry('1015x620+250+50')
root.minsize(width=1015, height=250)
root.maxsize(width=1015, height=250)
root.configure(background='#e0eaa0', borderwidth=15)
#Σύνδεση με τη βάση δεδομένων
connect = sqlite3.connect("dedomena.db")
cur = connect.cursor()
#Δημιουργία σκελετού
frame1=Frame(root, background='#99ea85', borderwidth=15)
frame1.grid (column=0, row=0, sticky=NW, padx=0, pady=10)
frame2=Frame(root, background='#e0eaa0', borderwidth=15)
frame2.grid (column=0, row=1, sticky=NE, padx=0, pady=0)
#Στοιχεία
label1=Label(frame1, text='Όνομα', font=('Times',14), background='#99ea85', foreground='#13038c')
label1.grid(column=0, row=0, sticky=W, padx=5, pady=15)
label2=Label(frame1, text='Επίθετο', font=('Times',14), background='#99ea85', foreground='#13038c')
label2.grid(column=2, row=0, sticky=W, padx=5, pady=15)
label3=Label(frame1, text='Διεύθυνση Οικίας', font=('Times',14), background='#99ea85', foreground='#13038c')
label3.grid(column=4, row=0, sticky=W, padx=5, pady=15)
label4=Label(frame1, text='Περιοχή', font=('Times',14), background='#99ea85', foreground='#13038c')
label4.grid(column=0, row=1, sticky=W, padx=5, pady=15)
label5=Label(frame1, text='Αριθμός', font=('Times',14), background='#99ea85', foreground='#13038c')
label5.grid(column=2, row=1, sticky=W, padx=5, pady=15)
label6=Label(frame1, text='Κινητό Τηλέφωνο', font=('Times',14), background='#99ea85', foreground='#13038c')
label6.grid(column=4, row=1, sticky=W, padx=5, pady=15)
#Εισαγωγή στοιχείων
entry1=Entry(frame1, width=21, font=('Times',14), justify=RIGHT)
entry1.grid(column=1, row=0, padx=5, pady=5, sticky=W)
entry1.get()
entry2=Entry(frame1, width=21, font=('Times',14), justify=RIGHT)
entry2.grid(column=3, row=0, padx=5, pady=5, sticky=E)
entry2.get()
entry3=Entry(frame1, width=21, font=('Times',14), justify=RIGHT)
entry3.grid(column=5, row=0, padx=5, pady=5, sticky=E)
entry3.get()
entry4=Entry(frame1, width=21, font=('Times',14), justify=RIGHT)
entry4.grid(column=1, row=1, padx=5, pady=5, sticky=E)
entry4.get()
entry5=Entry(frame1, width=21, font=('Times',14), justify=RIGHT)
entry5.grid(column=3, row=1, padx=5, pady=5, sticky=E)
entry5.get()
entry6=Entry(frame1, width=21, font=('Times',14), justify=RIGHT)
entry6.grid(column=5, row=1, padx=5, pady=5, sticky=E)
entry6.get()
#Εγγραφή δεδομένων
def save():
cur.execute("""INSERT INTO stoixeia (onoma, epitheto, diefthnsioikias, arithmosoikias, perioxioikias, mobile)
VALUES (?,?,?,?,?,?)""", (entry1.get(), entry2.get(), entry3.get(), entry4.get(), entry5.get(), entry6.get()))
cur.close()
connect.close()
#button
button1=Button(frame2, text='Aποθήκευση', font= ('Times', 12), background='#0e004b', foreground='#e0eaa0', borderwidth=0, highlightthickness=0, command=save)
button1.grid(column=0, row=0, padx=40, pady=0, sticky=E)
button2=Button(frame2, text='Εύρεση', font= ('Times', 12), background='#0e004b', foreground='#e0eaa0', borderwidth=0, highlightthickness=0)
button2.grid(column=1, row=0, padx=40, pady=0, sticky=E)
root.mainloop()
Αφού εισάγω τα στοιχεία στα πεδία entry με την αποθήκευση, αποθηκεύονται στον πίνακα dedomena.
Θα μπορούσα να κάνω την αναζήτηση και να εμφανίζονται τα στοιχεία σε listbox και το πρόβλημα θα λυνόταν.
def load():
cont = sqlite3.connect('dedomena.db')
c = cont.cursor()
c.execute(''' SELECT * FROM stoixeia WHERE onoma='%s' AND epitheto = '%s' ''' %(entry1.get(), entry2.get()))
mydata = c.fetchall()
for item in mydata:
tree1.insert('', 'end', values=item)
Επειδή όμως τα στοιχεία είναι αρκετά, δε μου αρέσει να εμφανίζονται κατά την αναζήτηση σε listbox, αλλά θέλω αν γίνεται να εμφανίζονται στα πεδία entry, δηλαδή εκεί που λέει όνομα να εμφανίζεται το όνομα, στο επίθετο το επίθετο κ.ο.κ.
Επίσης επειδή υπάρχει περίπτωση να υπάρχουν δύο με το ίδιο όνομα και το ίδιο επίθετο, προσπαθώ να φτιάξω μία συνάρτηση που θα με πηγαίνει στην επόμενη εγγραφή ή στην προηγούμενη εγγραφή.
Λοιπόν, πρώτα πρέπει να μάθεις πως γεμίζεις ένα entry με κάποιο string. Αυτό σου το δείχνω παραπάνω στην προηγούμενη μου απάντηση (Απ'ότι είδα δεν το υλοποίησες στην φόρμα σου). Απλός δημιουργείς ένα αντικείμενο StringVar, το βάζεις στην δήλωση του Entry στο πεδίο textvariable και κάθε φορά που καλείς την μέθοδο set του συγκεκριμένου αντικειμένου, τότε δυναμικά θα βλέπεις και τις αλλαγές που γίνεται μέσα στην φόρμα σου.
Στην συνέχεια θα κάνεις τα εξής:
Όταν θα κάνεις εύρεση, θα φέρνεις τα στοιχεία που σε ενδιαφέρουν στην κεντρική μνήμη και θα τα οργανώνεις σε μια δική σου δομή από κλάσεις (Σε έναν πίνακα). Στην φόρμα σου θα βάλεις 2 κουμπιά next και previous και κάθε φορά που πατάει next η previous ο χρήστης, θα πηγαίνεις στην κατάλληλη θέση στον πίνακα σου και θα φορτώνεις τα στοιχεία στην φόρμα για να τα δει.
Βέβαια όλα αυτά ισχύουν αν κατάλαβα καλά πως κάνεις εύρεση. Απ'ότι κατάλαβα όταν κάνεις εύρεση φέρνεις ένα εύρος από στοιχεία πελατών και όχι μόνο μόνο 6 στοιχεία που αντιστοιχούν σε έναν πελάτη και για αυτό υπάρχει περίπτωση 2 πελάτες να έχουν 1 από τα 6 στοιχεία τους κοινά.
Για παράδειγμα:
#Φτιάξε μια δομή που να κρατάει στην κεντρική μνήμη.
#ξεχωριστά τα στοιχεία του κάθε πελάτη.
class Object:
def __init__(self):
self.name = None
self.lastName = None
self.address = None
self.state = None
self.number = None
self.mobileNumber = None
pass
def writeObjectToForm(self, form):
form.nameVar.set(self.name)
form.lastNameVar.set(self.lastName)
form.addressVar.set(self.address)
form.stateVar.set(self.state)
form.numberVar.set(self.number)
form.mobileNumberVar.set(self.mobileNumber)
#Φτιάξε μια συνάρτηση η οποία με κάποιο κριτήριο
#θα βρίσκει όλα τα δεδομένα που σε ενδιαφέρουν από την βάση σου και θα τα οργανώνει
#στην κεντρική μνήμη σαν έναν πίνακα από αντικείμενα πελατών
#Objects.
def createArrayFromSQL():
#bla bla bla
return array
#Τέλος φτιάξε έναν απλό μηχανισμό για
#φορτώνεις τα στοιχεία στην φόρμα σου.
#Αυτό το array περιέχει Object αντικείμενα.
array = createArrayFromSQL()
counter = 0
#Επόμενο αντικείμενο.
if nextIsPressed:
counter += 1
array[counter].writeObjectToForm(myForm)
#Προηγούμενο.
if prevIsPressed:
counter -= 1
array[counter].writeObjectToForm(myForm)
Στην ουσία δημιουργείς "σελίδες" στην κεντρική σου μνήμη από αντικείμενα τύπου Πελάτης, και αναλόγως σε ποια σελίδα βρίσκεσαι πρέπει να φαίνεται στην φόρμα σου.
|