Oppure

Loading
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.
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
19/03/15 7:46
paolo1958
Il problema l'ho risolto. Aprivo le finestre successive alla princiapale con Tk() anzichè Toplevel()
aaa