Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Python - problema visualizzazione dati in una listbox (python 3.4 libreria Tkinter)
Forum - Python - problema visualizzazione dati in una listbox (python 3.4 libreria Tkinter)

Avatar
paolo1958 (Normal User)
Newbie


Messaggi: 4
Iscritto: 17/03/2015

Segnala al moderatore
Postato alle 10:45
Martedì, 17/03/2015
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.
Codice sorgente - presumibilmente Python

  1. from tkinter import *
  2.  
  3. root = Tk()#crea la finestra e la inserisce in una variabile chiamata prov (potrebbe essere chiamata in qualsiasi altro modo
  4. root.title(" CITTA' ITALIANE ")
  5. root.geometry('430x480+700+200')# si assegna le dimensioni della finestra
  6. contenuto = StringVar()
  7.  
  8. ar=["'Abano.Terme'                      --- PD ---      35031   Ita ","Abbadia Cerreto                  --- LO ---      26834   Ita ","Abbadia Lariana                  --- LC ---      23821   Ita ",
  9.     "Abbadia.San.Salvatore              --- SI ---      53021   Ita ","Abbasanta                        --- OR ---      09071   Ita ","Abbateggio                       --- PE ---      65020   Ita ",
  10.     "Abbiategrasso                      --- MI ---      20081   Ita ","Abetone                  --- PT ---      51021   Ita ","Abriola                          --- PZ ---      85010   Ita ",
  11.     "Acate                              --- RG ---      97011   Ita ","Accadia                  --- FG ---      71021   Ita ","Acceglio                 --- CN ---      12021   Ita ",
  12.     "Accettura                  --- MT ---      75011   Ita ","Acciano                  --- AQ ---      67020   Ita ","Accumoli                 --- RI ---      02011   Ita ",
  13.     "Acerenza                   --- PZ ---      85011   Ita ","Acerno                           --- SA ---      84042   Ita ","Acerra                           --- NA ---      80011   Ita ",
  14.     "Aci Bonaccorsi                     --- CT ---      95020   Ita ","Aci Castello                     --- CT ---      95021   Ita ","Aci Catena                       --- CT ---      95022   Ita ",
  15.     "Aci Sant'Antonio                   --- CT ---      95025   Ita ","Acireale                 --- CT ---      95024   Ita ","Acquacanina                      --- MC ---      62035   Ita ",
  16.     "Acquafondata                       --- FR ---      03040   Ita ","Acquaformosa                     --- CS ---      87010   Ita ","Acquafredda                      --- BS ---      25010   Ita ",
  17.     "Acqualagna                 --- PU ---      61041   Ita ","Acquanegra Cremonese             --- CR ---      26020   Ita ","Acquanegra sul Chiese            --- MN ---      46011   Ita ",
  18.     "Acquapendente                      --- VT ---      01021   Ita ","Acquappesa                       --- CS ---      87020   Ita ","Acquarica del Capo               --- LE ---      73040   Ita "]
  19.  
  20. def aggiun_item():
  21.     print (miaa_lista.get(miaa_lista.curselection()))
  22.     ue=(miaa_lista.index(miaa_lista.curselection()))
  23.     print (ue)
  24.     ur=miaa_lista.get(miaa_lista.curselection()).split()
  25.     print(ur)
  26.     print(ur[0],ur[1])
  27.  
  28. def aggiun_item2():
  29.     global mia_lista
  30.     #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
  31.     ur=mia_lista.get(mia_lista.curselection()).split()
  32.     new_citta=ur[0].replace('.','  ')#cambio di una lettera all'interno di una stringa
  33.     citta_lista=new_citta
  34.     print(citta_lista)
  35.     print(ur)
  36.              
  37. def aggiungi_item():
  38.     global miaa_lista
  39.     global RagioneSn
  40.     global agg_ite
  41.     miaa_lista = Listbox(root,width=50, height=20)
  42.     miaa_lista.grid(row=0, column=0)
  43.     art=RagioneSn.get()
  44.     art=art.title() #questaistruzione mette la prima lettera sempre in maiuscolo
  45.     print(art)
  46.     RagioneS.grid_remove()
  47.     Lab2=Label(root,text="                                                                                          \n                                                                                              ").grid(row=4, column=0)
  48.     Lab6=Label(root,text="                                                                              \n                                                                           ",font=('arial',9,'bold')).grid(row=6, column=0, rowspan=2)
  49.     if art=="":
  50.         return prima()
  51.     weq=[]
  52.     for item in ar:
  53.         if (item[0:len(art)])==art:
  54.             weq.append(item)
  55.     print(weq)
  56.     print(len(weq))
  57.     if (len(weq))==0:
  58.         return prima()
  59.     else:
  60.         for item in ar:
  61.             if (item[0:len(art)])==art:
  62.                 miaa_lista.insert(END,item)
  63.  
  64.     aggiun_it= Button(root, text = "                                  Valida la scelta                                   ", font=('arial',9,'bold'), command =aggiun_item).grid(row=2, column = 0)
  65.     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)    
  66.    
  67.      
  68. def prima():
  69.     global mia_lista
  70.     global RagioneSn
  71.     global RagioneS
  72.     global Lab2
  73.     global Lab3
  74.     global agg_ite
  75.     mia_lista = Listbox(root,width=50, height=20)
  76.     mia_lista.grid(row=0, column=0)
  77.     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' ",\
  78.     justify=('left'), fg=('red'),font=('arial',8,'bold' )).grid(row=0, column=1)
  79.     Lab5=Label(root,text="").grid(row=1, column=0)
  80.     RagioneSn=StringVar()
  81.     RagioneS = Entry(root, textvariable=RagioneSn,width=40)
  82.     RagioneS.grid(row=5, column = 0)
  83.     for c in ar :
  84.         mia_lista.insert(END,c)
  85.  
  86.     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)
  87.     Lab3=Label(root,text ="").grid(row=3, column=0)
  88.     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)
  89.     aggiungi_it= Button(root, text = " Trova città ",font=('arial',9,'bold'), command=aggiungi_item).grid(row=6, column = 0)
  90.  
  91. mia_lista=[]
  92. Botto_it= Button(root, text = " Cliccare 'QUI ' per popolare la lista ",command =prima).grid()
  93.  
  94.  
  95. root.mainloop()

  

PROGRAMMA CON PROBLEMA:
Codice sorgente - presumibilmente Python

  1. from tkinter import *
  2.  
  3. root1 = Tk()#crea la finestra e la inserisce in una variabile chiamata prov (potrebbe essere chiamata in qualsiasi altro modo
  4. root1.state('zoomed')
  5. root1.title("Gestionale fatture pro-forma")
  6. root1.geometry('640x480+400+150')# si assegna le dimensioni della finestra
  7. barra_menu = Menu(root1)
  8. s_width = root1.winfo_screenwidth()
  9. s_height = root1.winfo_screenheight()
  10. s1_width=s_width/100
  11. s1_height=s_height/100
  12.  
  13. def insana():
  14.         root = Tk()#crea la finestra e la inserisce in una variabile chiamata prov (potrebbe essere chiamata in qualsiasi altro modo
  15.         root.title(" CITTA' ITALIANE ")
  16.         root.geometry('430x480+700+200')# si assegna le dimensioni della finestra
  17.        
  18.        
  19.         ar=["'Abano.Terme'                      --- PD ---      35031   Ita ","Abbadia Cerreto                  --- LO ---      26834   Ita ","Abbadia Lariana                  --- LC ---      23821   Ita ",
  20.                     "Abbadia.San.Salvatore              --- SI ---      53021   Ita ","Abbasanta                        --- OR ---      09071   Ita ","Abbateggio                       --- PE ---      65020   Ita ",
  21.                     "Abbiategrasso                      --- MI ---      20081   Ita ","Abetone                  --- PT ---      51021   Ita ","Abriola                          --- PZ ---      85010   Ita ",
  22.                     "Acate                              --- RG ---      97011   Ita ","Accadia                  --- FG ---      71021   Ita ","Acceglio                 --- CN ---      12021   Ita ",
  23.                     "Accettura                  --- MT ---      75011   Ita ","Acciano                  --- AQ ---      67020   Ita ","Accumoli                 --- RI ---      02011   Ita ",
  24.                     "Acerenza                   --- PZ ---      85011   Ita ","Acerno                           --- SA ---      84042   Ita ","Acerra                           --- NA ---      80011   Ita ",
  25.                     "Aci Bonaccorsi                     --- CT ---      95020   Ita ","Aci Castello                     --- CT ---      95021   Ita ","Aci Catena                       --- CT ---      95022   Ita ",
  26.                     "Aci Sant'Antonio                   --- CT ---      95025   Ita ","Acireale                 --- CT ---      95024   Ita ","Acquacanina                      --- MC ---      62035   Ita ",
  27.                     "Acquafondata                       --- FR ---      03040   Ita ","Acquaformosa                     --- CS ---      87010   Ita ","Acquafredda                      --- BS ---      25010   Ita ",
  28.                     "Acqualagna                 --- PU ---      61041   Ita ","Acquanegra Cremonese             --- CR ---      26020   Ita ","Acquanegra sul Chiese            --- MN ---      46011   Ita ",
  29.                     "Acquapendente                      --- VT ---      01021   Ita ","Acquappesa                       --- CS ---      87020   Ita ","Acquarica del Capo               --- LE ---      73040   Ita "]
  30.  
  31.         def aggiun_item():
  32.                 print (miaa_lista.get(miaa_lista.curselection()))
  33.                 ue=(miaa_lista.index(miaa_lista.curselection()))
  34.                 print (ue)
  35.                 ur=miaa_lista.get(miaa_lista.curselection()).split()
  36.                 print(ur)
  37.                 print(ur[0],ur[1])
  38.  
  39.         def aggiun_item2():
  40.                 global mia_lista
  41.                
  42.                 #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
  43.                 ur=mia_lista.get(mia_lista.curselection()).split()
  44.                 new_citta=ur[0].replace('.','  ')#cambio di una lettera all'interno di una stringa
  45.                 citta_lista=new_citta
  46.                 print(citta_lista)
  47.                 print(ur)
  48.              
  49.         def aggiungi_item():
  50.                 global miaa_lista
  51.                 global RagioneSn
  52.                 global agg_ite
  53.                 miaa_lista = Listbox(root,width=50, height=20)
  54.                 miaa_lista.grid(row=0, column=0)
  55.                 art=RagioneSn.get()
  56.                 art=art.title() #questaistruzione mette la prima lettera sempre in maiuscolo
  57.                 print(art)
  58.                 RagioneS.grid_remove()
  59.                 Lab2=Label(root,text="                                                                                          \n                                                                                              ").grid(row=4, column=0)
  60.                 Lab6=Label(root,text="                                                                              \n                                                                           ",font=('arial',9,'bold')).grid(row=6, column=0, rowspan=2)
  61.                 if art=="":
  62.                         return prima()
  63.                 weq=[]
  64.                 for item in ar:
  65.                         if (item[0:len(art)])==art:
  66.                                 weq.append(item)
  67.                 print(weq)
  68.                 print(len(weq))
  69.                 if (len(weq))==0:
  70.                         return prima()
  71.                 else:
  72.                         for item in ar:
  73.                                 if (item[0:len(art)])==art:
  74.                                         miaa_lista.insert(END,item)
  75.  
  76.                 aggiun_it= Button(root, text = "                                  Valida la scelta                                   ", font=('arial',9,'bold'), command =aggiun_item).grid(row=2, column = 0)
  77.                 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)    
  78.    
  79.      
  80.         def prima():
  81.                 global mia_lista
  82.                 global RagioneSn
  83.                 global RagioneS
  84.                 global Lab2
  85.                 global Lab3
  86.                 global agg_ite
  87.                 mia_lista = Listbox(root,width=50, height=20)
  88.                 mia_lista.grid(row=0, column=0)
  89.                 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' ",\
  90.                 justify=('left'), fg=('red'),font=('arial',8,'bold' )).grid(row=0, column=1)
  91.                 Lab5=Label(root,text="").grid(row=1, column=0)
  92.                 RagioneSn = StringVar()
  93.                 RagioneS = Entry(root, textvariable=RagioneSn,width=40)
  94.                 RagioneS.grid(row=5, column = 0)
  95.                 for c in ar:
  96.                         mia_lista.insert(END,c)
  97.  
  98.                 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)
  99.                 Lab3=Label(root,text ="").grid(row=3, column=0)
  100.                 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)
  101.                 aggiungi_it= Button(root, text = " Trova città ",font=('arial',9,'bold'), command=aggiungi_item).grid(row=6, column = 0)
  102.  
  103.         Botto_it= Button(root, text = " Cliccare 'QUI ' per popolare la lista ",command =prima).grid()
  104.  
  105.  
  106.         root.mainloop()
  107.  
  108. Bott_in= Button(root1, text = " Cliccare 'QUI ' per eseguire la prova del programma ",command =insana).grid()  
  109. root1.mainloop()


PM Quote
Avatar
paolo1958 (Normal User)
Newbie


Messaggi: 4
Iscritto: 17/03/2015

Segnala al moderatore
Postato alle 8:46
Giovedì, 19/03/2015
Il problema l'ho risolto. Aprivo le finestre successive alla princiapale con Tk() anzichè Toplevel()

PM Quote