Forum >> Principianti >> Rubrica telefonica

Pagina: 1

Buongiorno,
sto construendo una piccola rubrica telefonica partendo da una piccola porzione e mano mano aggiungendo pezzi e funzioni.
_________________________________________________________
import MySQLdb
from Tkinter import *

FPadre=Tk()
FLista=Tk()

def invia():
a=Nome.get()
b=Cognome.get()
c=Telefono.get()
riga="insert into nomi (Nome,Cognome,Telefono) values ('%s','%s',%d)" %(a,b,c)
cursore.execute(riga)
connessione.commit()
#
def cerca():
a=Nome.get()
b=Cognome.get()
c=Telefono.get()
rigacerca="select * from nomi where nome=('%s') " %(a)
cursore.execute(rigacerca)
#

Nome=StringVar(FPadre)
Cognome=StringVar(FPadre)
Telefono=IntVar(FPadre)


Eti=Label(text="Finestra 1").pack()
But=Button(text="Salva",command=invia).pack()
#
ButLista=Button(text="Cerca",command=cerca).pack()
#
connessione=MySQLdb.connect(host="localhost",user="root",passwd="bwsa2008*",db="prova")
cursore=connessione.cursor()

a = Entry(FPadre,textvariable=Nome).pack()
b = Entry(FPadre,textvariable=Cognome).pack()
c = Entry(FPadre,textvariable=Telefono).pack()

FPadre.mainloop()
____________________________________


Il codice funziona (esclusi pezzi tra # che sono la parte "nuova") anche se molto semplice.

Apre una finestra metto nome cognome e telefono e invia a MYSQL che lo mette nella sua tabellina(nomi).

Ora vorrei aggiungere la funzione cerca, metto nome o cognome o telefono e mi cerca nel DB i contatti corrispondenti,la mia idea sarebbe di aprire una seconda finestra e mostrarli li(sto imparando ) ma non so bene come renderlo..

Poi una domanda : come posso mettere un titolo alle Entry e come le posso formattare (posizione ,lunghezza etc) ?


Grazie.




Ammesso e non concesso che la riga:
rigacerca="select * from nomi where nome=('%s') " %(a)

all'interno della funzione cerca, funzioni correttamente, non ho provato,
alla fine della funzione ti devi far restituire i risultati della ricerca con un return, ad esempio:
return rigaricerca
ottenuti i dati da db, secondo tua volontà dovrai far creare e aprire la nuova finestra, immagino tu la voglia chiamare FLista con all'interno i widget necessari per la visualizzazione dei risultati ottenuti.
d,e,f, (nomi poco evocativi per l'utilizzo consiglio di utilizzare qualcosa di più significativo) Entry o altro a tua scelta saranno i widget per la nuova finestra,su cui inserire i risultati, con i widget dovrai utilizzare i metodi definiti per tali widget, probabilmente invece di .get() sarà .set() devi cercare nella documentazione (cosa obbligata se si vuole imparare e capire il loro funzionamento),
tieni presente che dal return della funzione potresti ottenere più di un oggetto(dato/variabile/ o altro che arrivi dal db), quindi forse dovrai spacchettare i dati ricevuti,
per quel che riguarda il titolo non mi ricordo se sia possibile ma al limite ci affianchi una label,
Cosa intendi per :
come le posso formattare (posizione ,lunghezza etc) ?





--- Ultima modifica di Orsogrizzly in data 2016-04-21 14:38:23 ---
Grazie.

Intendo come posso mettere il titolo della casella metterlo in un dato ordine etc.


Sto comunque leggendo questa guida su tkinter che lo spiega molto bene :


http://linuxdidattica.org/docs/altre_scuole/msm_p/txs_01.html

Grazie.

Intendo come posso mettere il titolo della casella metterlo in un dato ordine etc.


Sto comunque leggendo questa guida su tkinter che lo spiega molto bene :


http://linuxdidattica.org/docs/altre_scuole/msm_p/txs_01.html


Ti rispondo con una frase all'interno della guida che stai utilizzando:
leggi l'ultima riga


10.2 Terminologia tecnica: «orientazione»
Con «orientazione verticale» si intende i lati TOP e
BOTTOM. Con «orientazione orizzontale» si intende i lati
LEFT e RIGHT.

Durante l'impacchettamento è possibile mischiare le orientazioni.
Ad esempio si sarebbe potuto impacchettare un pulsante in
verticale (ad esempio TOP) e l'altro in orizzontale (ad
esempio LEFT).

Ma mischiare così le orientazioni in un contenitore non è una
buona idea
. Usando orientazioni miste è difficile prevedere
quale sarà il risultato visivo, con risultati particolarmente
sorprendenti in caso di ridimensionamento della finesta.

Dunque è una buona pratica il non mischiare le orientazioni
nel medesimo contenitore. Il modo corretto per gestire
GUI complicati, in cui è effettivamente necessario avere
orientazioni multiple, è attraverso l'annidamento dei
contenitori
. 9

e in oltre sempre dalla stessa guida:
16.1 Tre tecniche di controllo della disposizione di un GUI



--- Ultima modifica di Orsogrizzly in data 2016-04-21 14:48:50 ---
Voglio aggiungere altri link per Tkinter :

http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry.html

http://www.webalice.it/srosta/tkinter005.html#Componenti%20della%20GUI1

spero ti possa essere utile




--- Ultima modifica di Orsogrizzly in data 2016-04-21 15:03:06 ---
Voglio aggiungere altri link per Tkinter :

http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry.html

http://www.webalice.it/srosta/tkinter005.html#Componenti%20della%20GUI1

spero ti possa essere utile




--- Ultima modifica di Orsogrizzly in data 2016-04-21 15:03:06 ---
Grazie mille !!
Tutto mi è utile...
Ciao ho riscritto tutto da capo.

Ho un problemino

Questa funzione è legata ad un bottone che cerca nel DB mysql contatti con quel nomeo cognome:

def cerca():
dict={}
DBnome=e1.get()
DBcognome=e2.get()
cursore = connessione.cursor()
cursore.execute("select * FROM nomi where nome='%s' or cognome ='%s'" %(DBnome,DBcognome))
dati = cursore.fetchall()
a = len(dati)
print dati

if a == 1:
print "Ho trovato 1 contatto"
elif a==0:
print "Non ho trovato contatti."
else:
print "Ho trovato " + str(a) + " contatti !!"
numcontatti= a-1
for contatto in range(0,a):
cont = 0
print "ID = " +str(daticont0),
print "\t Nome = " + str(daticont1),
print "\t Cognome = " + str(daticont2),
print "\t Telefono = " + str(daticont3)
print "\t Indirizzo = " + str(daticont4),
print "\t Mail = " + str(daticont5)
cont+=1

Si connete al DB cerca conta correttamente il numero di record e mi ritorna una tupla di tuple con i risultati :

((3, 'daniele', 'x', '3453453', 'via cia ociao', 'daniele.x@googlemail.com'), (5, 'daniele', 'pallotta', '534534', 'piazza la bomba e scappa', 'd.pallotta@hotmail.it'))

La struttura del DB è ID NOME COGNOME TELEFONO INDIRIZZO MAIL.
Ora io qui ciclo la tupla per ritornare i dati :

for contatto in range(1,a):
cont = 0
print "ID = " +str(daticont0),
print "\t Nome = " + str(daticont1),
print "\t Cognome = " + str(daticont2),
print "\t Telefono = " + str(daticont3)
print "\t Indirizzo = " + str(daticont4),
print "\t Mail = " + str(daticont5)
cont+=1

ma mi torna 2 volte lo stesso contatto !!!

ID = 3 Nome = daniele Cognome = x Telefono = 3453453
Indirizzo = via cia ociao Mail = daniele.x@googlemail.com

ID = 3 Nome = daniele Cognome = x Telefono = 3453453
Indirizzo = via cia ociao Mail = daniele.x@googlemail.com


perchè ??
la mia idea era di partire dall'elemento 0 della tupla(cont) e prenderne a sua volta l'elemento 0 (ID) e andare avanti.
ora dovrebbe rientrare nel ciclo (a = 2) prendere l'elemento 1 della tupla (quindi la secondatupla "figlia") e riscrivere i dati ma in realtà riscrive lo stesso contatto.

forse è meglio usare while?

Grazie come sempre !!
Ho risolto !!!
mettendo cont = 0 all'interno del ciclo lo azzeravo sempre e quindi mi prendeva sempre l'elemento 0 !!!
messo fuoir dal ciclo va!


Pagina: 1



Esegui il login per scrivere una risposta.