Forum
>>
Principianti
>>
Rubrica telefonica
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da lrndnl |
2016-04-21 09:21:24 - Rubrica telefonica
|
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. |
|
Scritto da Orsogrizzly |
2016-04-21 14:31:06 - Re: Rubrica telefonica
|
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 rigaricercaottenuti 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 :
--- Ultima modifica di Orsogrizzly in data 2016-04-21 14:38:23 --- |
|
Scritto da lrndnl |
2016-04-21 14:36:58 - Re: Rubrica telefonica
|
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 |
|
Scritto da Orsogrizzly |
2016-04-21 14:46:09 - Re: Rubrica telefonica
|
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 --- |
|
Scritto da Orsogrizzly |
2016-04-21 14:53:14 - Re: Rubrica telefonica
|
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 --- |
|
Scritto da lrndnl |
2016-04-21 15:04:44 - Re: Rubrica telefonica
|
Grazie mille !!
Tutto mi è utile... |
|
Scritto da lrndnl |
2016-04-25 21:46:36 - Re: Rubrica telefonica
|
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 !! |
|
Scritto da lrndnl |
2016-04-25 22:28:13 - Re: Rubrica telefonica
|
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.