17/03/15 9:45
paolo1958
Ho scritto un piccolo programma (mi scuso in anticipo se scritto in modo pedestre) per la ricerca di alcuni dati all'interno di una listbox. Il programma non dà alcun errore ed è possibile visualizzare il dato con doppio click su di esso, oppure ricercando il dato (se la lista è molto lunga) tramite una entry. Il problema nasce quando vado ad inserire il codice di questo piccolo programma in un altro programma ben più ampio. Praticamente posso continuare a visualizzare correttamente il dato della lista tramite doppio click su di esso, ma non riesco più ha visualizzare i dati facendo una ricerca tramite la entry (probabilmente il problema si trova nel passagio dei dati dalla funzione "prima" alla funzione "aggiungi_item". Posto qui di seguito il programma che non da errori e successivamente quello che non funziona. Naturalmenche i risultati del programma vengono stampati nella shell. Ringrazio anticipatamente per l'aiuto che qualcuno potrà e vorrà darmi.
Programma senza errori.
PROGRAMMA CON PROBLEMA:
Programma senza errori.
from tkinter import * root = Tk()#crea la finestra e la inserisce in una variabile chiamata prov (potrebbe essere chiamata in qualsiasi altro modo root.title(" CITTA' ITALIANE ") root.geometry('430x480+700+200')# si assegna le dimensioni della finestra contenuto = StringVar() ar=["'Abano.Terme' --- PD --- 35031 Ita ","Abbadia Cerreto --- LO --- 26834 Ita ","Abbadia Lariana --- LC --- 23821 Ita ", "Abbadia.San.Salvatore --- SI --- 53021 Ita ","Abbasanta --- OR --- 09071 Ita ","Abbateggio --- PE --- 65020 Ita ", "Abbiategrasso --- MI --- 20081 Ita ","Abetone --- PT --- 51021 Ita ","Abriola --- PZ --- 85010 Ita ", "Acate --- RG --- 97011 Ita ","Accadia --- FG --- 71021 Ita ","Acceglio --- CN --- 12021 Ita ", "Accettura --- MT --- 75011 Ita ","Acciano --- AQ --- 67020 Ita ","Accumoli --- RI --- 02011 Ita ", "Acerenza --- PZ --- 85011 Ita ","Acerno --- SA --- 84042 Ita ","Acerra --- NA --- 80011 Ita ", "Aci Bonaccorsi --- CT --- 95020 Ita ","Aci Castello --- CT --- 95021 Ita ","Aci Catena --- CT --- 95022 Ita ", "Aci Sant'Antonio --- CT --- 95025 Ita ","Acireale --- CT --- 95024 Ita ","Acquacanina --- MC --- 62035 Ita ", "Acquafondata --- FR --- 03040 Ita ","Acquaformosa --- CS --- 87010 Ita ","Acquafredda --- BS --- 25010 Ita ", "Acqualagna --- PU --- 61041 Ita ","Acquanegra Cremonese --- CR --- 26020 Ita ","Acquanegra sul Chiese --- MN --- 46011 Ita ", "Acquapendente --- VT --- 01021 Ita ","Acquappesa --- CS --- 87020 Ita ","Acquarica del Capo --- LE --- 73040 Ita "] def aggiun_item(): print (miaa_lista.get(miaa_lista.curselection())) ue=(miaa_lista.index(miaa_lista.curselection())) print (ue) ur=miaa_lista.get(miaa_lista.curselection()).split() print(ur) print(ur[0],ur[1]) def aggiun_item2(): global mia_lista #Qui c'è il problema dei comuni con nome composto percui con la clausola split il nome veniva splittato in varie parti, ho sistemato il problema con replace ur=mia_lista.get(mia_lista.curselection()).split() new_citta=ur[0].replace('.',' ')#cambio di una lettera all'interno di una stringa citta_lista=new_citta print(citta_lista) print(ur) def aggiungi_item(): global miaa_lista global RagioneSn global agg_ite miaa_lista = Listbox(root,width=50, height=20) miaa_lista.grid(row=0, column=0) art=RagioneSn.get() art=art.title() #questaistruzione mette la prima lettera sempre in maiuscolo print(art) RagioneS.grid_remove() Lab2=Label(root,text=" \n ").grid(row=4, column=0) Lab6=Label(root,text=" \n ",font=('arial',9,'bold')).grid(row=6, column=0, rowspan=2) if art=="": return prima() weq=[] for item in ar: if (item[0:len(art)])==art: weq.append(item) print(weq) print(len(weq)) if (len(weq))==0: return prima() else: for item in ar: if (item[0:len(art)])==art: miaa_lista.insert(END,item) aggiun_it= Button(root, text = " Valida la scelta ", font=('arial',9,'bold'), command =aggiun_item).grid(row=2, column = 0) lab=Label(root, text="Seleziona la città che ti occorre, dopodichè\n clicca sul tasto 'Valida la scelta' ", fg=('red'),font=('arial',8,'bold' )).grid(row=3, column=0) def prima(): global mia_lista global RagioneSn global RagioneS global Lab2 global Lab3 global agg_ite mia_lista = Listbox(root,width=50, height=20) mia_lista.grid(row=0, column=0) Lab4=Label(root, text="Per scorrere\nl'elenco è\nsufficiente \nutilizzare la\nrotellina del\nmouse, oppure\nselezionare con\nun click una\nqualsiasi voce \nposta all'interno\ndella lista e\nutilizzare i tasti\ndirezionali.....\n'tasti Su e GIU' o\n'PgUp - PgDown' ",\ justify=('left'), fg=('red'),font=('arial',8,'bold' )).grid(row=0, column=1) Lab5=Label(root,text="").grid(row=1, column=0) RagioneSn=StringVar() RagioneS = Entry(root, textvariable=RagioneSn,width=40) RagioneS.grid(row=5, column = 0) for c in ar : mia_lista.insert(END,c) agg_ite=Button(root, text=" Selezionare con doppio click la voce e premere qui", font=('arial',9,'bold'), command=aggiun_item2).grid(row=2, column =0) Lab3=Label(root,text ="").grid(row=3, column=0) Lab2=Label(root,text="(Per fare una ricerca mirata della Città inserire parte\n del nome qui sotto, e premere il tasto 'Trova citta'", fg=('red'),font=('arial',8,'bold' )).grid(row=4, column=0) aggiungi_it= Button(root, text = " Trova città ",font=('arial',9,'bold'), command=aggiungi_item).grid(row=6, column = 0) mia_lista=[] Botto_it= Button(root, text = " Cliccare 'QUI ' per popolare la lista ",command =prima).grid() root.mainloop()
PROGRAMMA CON PROBLEMA:
from tkinter import * root1 = Tk()#crea la finestra e la inserisce in una variabile chiamata prov (potrebbe essere chiamata in qualsiasi altro modo root1.state('zoomed') root1.title("Gestionale fatture pro-forma") root1.geometry('640x480+400+150')# si assegna le dimensioni della finestra barra_menu = Menu(root1) s_width = root1.winfo_screenwidth() s_height = root1.winfo_screenheight() s1_width=s_width/100 s1_height=s_height/100 def insana(): root = Tk()#crea la finestra e la inserisce in una variabile chiamata prov (potrebbe essere chiamata in qualsiasi altro modo root.title(" CITTA' ITALIANE ") root.geometry('430x480+700+200')# si assegna le dimensioni della finestra ar=["'Abano.Terme' --- PD --- 35031 Ita ","Abbadia Cerreto --- LO --- 26834 Ita ","Abbadia Lariana --- LC --- 23821 Ita ", "Abbadia.San.Salvatore --- SI --- 53021 Ita ","Abbasanta --- OR --- 09071 Ita ","Abbateggio --- PE --- 65020 Ita ", "Abbiategrasso --- MI --- 20081 Ita ","Abetone --- PT --- 51021 Ita ","Abriola --- PZ --- 85010 Ita ", "Acate --- RG --- 97011 Ita ","Accadia --- FG --- 71021 Ita ","Acceglio --- CN --- 12021 Ita ", "Accettura --- MT --- 75011 Ita ","Acciano --- AQ --- 67020 Ita ","Accumoli --- RI --- 02011 Ita ", "Acerenza --- PZ --- 85011 Ita ","Acerno --- SA --- 84042 Ita ","Acerra --- NA --- 80011 Ita ", "Aci Bonaccorsi --- CT --- 95020 Ita ","Aci Castello --- CT --- 95021 Ita ","Aci Catena --- CT --- 95022 Ita ", "Aci Sant'Antonio --- CT --- 95025 Ita ","Acireale --- CT --- 95024 Ita ","Acquacanina --- MC --- 62035 Ita ", "Acquafondata --- FR --- 03040 Ita ","Acquaformosa --- CS --- 87010 Ita ","Acquafredda --- BS --- 25010 Ita ", "Acqualagna --- PU --- 61041 Ita ","Acquanegra Cremonese --- CR --- 26020 Ita ","Acquanegra sul Chiese --- MN --- 46011 Ita ", "Acquapendente --- VT --- 01021 Ita ","Acquappesa --- CS --- 87020 Ita ","Acquarica del Capo --- LE --- 73040 Ita "] def aggiun_item(): print (miaa_lista.get(miaa_lista.curselection())) ue=(miaa_lista.index(miaa_lista.curselection())) print (ue) ur=miaa_lista.get(miaa_lista.curselection()).split() print(ur) print(ur[0],ur[1]) def aggiun_item2(): global mia_lista #Qui c'è il problema dei comuni con nome composto percui con la clausola split il nome veniva splittato in varie parti, ho sistemato il problema con replace ur=mia_lista.get(mia_lista.curselection()).split() new_citta=ur[0].replace('.',' ')#cambio di una lettera all'interno di una stringa citta_lista=new_citta print(citta_lista) print(ur) def aggiungi_item(): global miaa_lista global RagioneSn global agg_ite miaa_lista = Listbox(root,width=50, height=20) miaa_lista.grid(row=0, column=0) art=RagioneSn.get() art=art.title() #questaistruzione mette la prima lettera sempre in maiuscolo print(art) RagioneS.grid_remove() Lab2=Label(root,text=" \n ").grid(row=4, column=0) Lab6=Label(root,text=" \n ",font=('arial',9,'bold')).grid(row=6, column=0, rowspan=2) if art=="": return prima() weq=[] for item in ar: if (item[0:len(art)])==art: weq.append(item) print(weq) print(len(weq)) if (len(weq))==0: return prima() else: for item in ar: if (item[0:len(art)])==art: miaa_lista.insert(END,item) aggiun_it= Button(root, text = " Valida la scelta ", font=('arial',9,'bold'), command =aggiun_item).grid(row=2, column = 0) lab=Label(root, text="Seleziona la città che ti occorre, dopodichè\n clicca sul tasto 'Valida la scelta' ", fg=('red'),font=('arial',8,'bold' )).grid(row=3, column=0) def prima(): global mia_lista global RagioneSn global RagioneS global Lab2 global Lab3 global agg_ite mia_lista = Listbox(root,width=50, height=20) mia_lista.grid(row=0, column=0) Lab4=Label(root, text="Per scorrere\nl'elenco è\nsufficiente \nutilizzare la\nrotellina del\nmouse, oppure\nselezionare con\nun click una\nqualsiasi voce \nposta all'interno\ndella lista e\nutilizzare i tasti\ndirezionali.....\n'tasti Su e GIU' o\n'PgUp - PgDown' ",\ justify=('left'), fg=('red'),font=('arial',8,'bold' )).grid(row=0, column=1) Lab5=Label(root,text="").grid(row=1, column=0) RagioneSn = StringVar() RagioneS = Entry(root, textvariable=RagioneSn,width=40) RagioneS.grid(row=5, column = 0) for c in ar: mia_lista.insert(END,c) agg_ite=Button(root, text=" Selezionare con doppio click la voce e premere qui", font=('arial',9,'bold'), command=aggiun_item2).grid(row=2, column =0) Lab3=Label(root,text ="").grid(row=3, column=0) Lab2=Label(root,text="(Per fare una ricerca mirata della Città inserire parte\n del nome qui sotto, e premere il tasto 'Trova citta'", fg=('red'),font=('arial',8,'bold' )).grid(row=4, column=0) aggiungi_it= Button(root, text = " Trova città ",font=('arial',9,'bold'), command=aggiungi_item).grid(row=6, column = 0) Botto_it= Button(root, text = " Cliccare 'QUI ' per popolare la lista ",command =prima).grid() root.mainloop() Bott_in= Button(root1, text = " Cliccare 'QUI ' per eseguire la prova del programma ",command =insana).grid() root1.mainloop()
aaa