Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Εμφάνιση δεδομένων σε φόρμα

Εμφάνιση δεδομένων σε φόρμα 7 Χρόνια 9 Μήνες πριν #4209

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 56
Καλησπέρα, έχω φτιάξει μία φόρμα στην tkinter, με πεδία όνομα, επίθετο, τηλέφωνο κ.λπ., την οποία την έχω συνδέσει με έναν πίνακα με sqlite. Δύο πράγματα θέλω να ρωτήσω.
1. Πώς μπορώ να εμφανίζω τα δεδομένα σε πεδία entry.
2. Επειδή υπάρχει η περίπτωση να υπάρχουν δύο άνθρωποι με το ίδιο ονοματεπώνυμο, όταν θα μου εμφανίζει τον έναν να φτιάξω ένα button επόμενη εγγραφή, οπότε να εμφανίζεται και ο δεύτερος.

Το έφτιαξα με listbox, αλλά επειδή τα πεδία είναι αρκετά δε μου άρεσε. Γι' αυτό ρωτάω αν γίνεται με entry πεδία.
Ευχαριστώ εκ των προτέρων.
Τελευταία διόρθωση: 7 Χρόνια 9 Μήνες πριν από cps.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Εμφάνιση δεδομένων σε φόρμα 7 Χρόνια 9 Μήνες πριν #4210

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
cps έγραψε:
Καλησπέρα, έχω φτιάξει μία φόρμα στην tkinter, με πεδία όνομα, επίθετο, τηλέφωνο κ.λπ., την οποία την έχω συνδέσει με έναν πίνακα με sqlite. Δύο πράγματα θέλω να ρωτήσω.
1. Πώς μπορώ να εμφανίζω τα δεδομένα σε πεδία entry.
2. Επειδή υπάρχει η περίπτωση να υπάρχουν δύο άνθρωποι με το ίδιο ονοματεπώνυμο, όταν θα μου εμφανίζει τον έναν να φτιάξω ένα button επόμενη εγγραφή, οπότε να εμφανίζεται και ο δεύτερος.

Το έφτιαξα με listbox, αλλά επειδή τα πεδία είναι αρκετά δε μου άρεσε. Γι' αυτό ρωτάω αν γίνεται με entry πεδία.
Ευχαριστώ εκ των προτέρων.


Αν δεν κατάλαβα καλά τι ακριβώς θέλεις να μάθεις ξανά ρώτα με.
from tkinter import *
 
 
'''Δημιουργεί 2 entries και 1 button.
Όταν πατάς το button, αντιγράφει το κείμενο από
το entry1 στο entry2.'''
 
#----Initializing TK----#
screen = Tk()
screen.geometry("200x200")
screen.title("Test")
#----Initializing TK----#
 
 
#Creating Tk Variable Objects#
var1 = StringVar()
var2 = StringVar()
#Creating Tk Variable Objects#
 
 
 
#Declaring the button functionality.
def JustDoIt():
    data = var1.get()
    var2.set(data)
 
 
#Creating some widgets.
entry1 = Entry(textvariable = var1)
entry2 = Entry(textvariable = var2)
button = Button(text = "Copy-Paste", command = JustDoIt)
 
#Packing the widgets.
entry1.pack()
entry2.pack()
button.pack()
 
screen.mainloop()
 
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": cps

Εμφάνιση δεδομένων σε φόρμα 7 Χρόνια 9 Μήνες πριν #4211

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 56
Έχω φτιάξει αυτή τη φόρμα (δεν τη γράφω ολόκληρη, αλλά ένα μέρος)
#!/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, δηλαδή εκεί που λέει όνομα να εμφανίζεται το όνομα, στο επίθετο το επίθετο κ.ο.κ.

Επίσης επειδή υπάρχει περίπτωση να υπάρχουν δύο με το ίδιο όνομα και το ίδιο επίθετο, προσπαθώ να φτιάξω μία συνάρτηση που θα με πηγαίνει στην επόμενη εγγραφή ή στην προηγούμενη εγγραφή.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Εμφάνιση δεδομένων σε φόρμα 7 Χρόνια 9 Μήνες πριν #4212

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Κάτι τέτοιο θα σε βοηθούσε:

import tkinter
from tkinter import *
 
import sqlite3
 
con = sqlite3.connect('test.db')
cur = con.cursor()
qry = """SELECT * FROM katalogos"""
cur.execute(qry)
records = cur.fetchall()
nrecords = len(records)
currecord = 0
cur.close()
con.close()
 
 
 
def records_show():
    global currecord
    global nrecords
    if currecord == 0:
        eneponimo.delete(0, END)
        enonoma.delete(0, END)
        eneponimo.insert(END, records[currecord][0])
        enonoma.insert(END, records[currecord][1])
        currecord +=1
    elif currecord < nrecords:
        eneponimo.delete(0, END)
        enonoma.delete(0, END)
        eneponimo.insert(END, records[currecord][0])
        enonoma.insert(END, records[currecord][1])
        currecord +=1
    else:
        btn["state"] = DISABLED
 
root = Tk()    
lbleponimo = Label(root, text='Επώνυμο:')
lbleponimo.grid(row=0, column=0)
eneponimo = Entry(root)
eneponimo.grid(row=0, column=1)
 
lblonoma = Label(root, text='Όνομα:')
lblonoma.grid(row=1, column=0)
enonoma = Entry(root)
enonoma.grid(row=1, column=1)
btn = Button(root, text='Records', command=records_show)
btn.grid(row=2, column=0, columnspan=2)
root.mainloop()


Ο παραπάνω κώδικας, εκτελεί ερώτημα από πίνακα sqlite (με δύο πεδία επώνυμο, όνομα) και εμφανίζει τις εγγραφές διαδοχικά. Όταν φτάσει στην τελευταία εγγραφή το κουμπί γίνεται ανενεργό. Εδώ βλέπεις μια ιδέα. Μόνο η φαντασία σου σε σταματά σ' αυτά που θέλεις να κάνεις.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": cps

Εμφάνιση δεδομένων σε φόρμα 7 Χρόνια 9 Μήνες πριν #4221

  • babaliaris1
  • Το Άβαταρ του/της 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)
 

Στην ουσία δημιουργείς "σελίδες" στην κεντρική σου μνήμη από αντικείμενα τύπου Πελάτης, και αναλόγως σε ποια σελίδα βρίσκεσαι πρέπει να φαίνεται στην φόρμα σου.
Τελευταία διόρθωση: 7 Χρόνια 9 Μήνες πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": cps

Εμφάνιση δεδομένων σε φόρμα 7 Χρόνια 9 Μήνες πριν #4233

  • cps
  • Το Άβαταρ του/της cps
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 56
Ευχαριστώ πάρα πολύ για τη βοήθεια.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.364 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου