Python - Tkinter - Aiuto con pulsanti e tuple

maicol07

Nuovo Utente
1 Ago 2017
2
0
1
Salve,
Sto avendo un problema con il mio script Python che usa Tkinter per la grafica. Sto costruendo una tabella con pulsanti cliccabili, dove la posizione di tutti i pulsanti è determinata da una tupla con le coordinate x e y. Ma quando cerco di aggiungere del testo tramite una casella di testo in un'altra finestra (vedi codice sotto), la tupla è l'ultima creata dal ciclo while. Ecco lo script:
Codice:
#Importazione di Tkinter
from tkinter import *
import tkinter.messagebox
import numpy as np
import os.path

def Salvataggio(p,var):
    try:
        dt[p]=var.get()
        np.save('timetable.npy', dt)
        tkinter.messagebox.showinfo(title="Successo!", message="Salvataggio effettuato con successo!")
        wtc.destroy()
        creaFinestra()
    except:
        tkinter.messagebox.showerror(title="Errore!", message="Si è verificato un errore, riprovare oppure contattare lo sviluppatore")

def CambiaOrario(p): #p è la posizione in coordinate y e x (tupla) del pulsante cliccato
    global wtc
    wtc=Toplevel()
    wtc.title("Modifica Orario - Orario scolastico - School Life Diary")
    wtc.iconbitmap('sld_icon_beta.ico')
    wtc.geometry("%dx%d+%d+%d" % (450, 200, 600, 250))
    dg={1:"Lunedì",2:"Martedì",3:"Mercoledì",4:"Giovedì",5:"Venerdì",6:"Sabato"}
    print(p)
    l=Label(wtc, text="Inserire la materia da visualizzare nell'orario la "+str(p[1])+"a ora del "+dg[p[0]]+".")
    l.pack(padx=10,pady=10)
    var=StringVar(value="")
    e=Entry(wtc, textvariable=var)
    e.pack(padx=10,pady=10)
    b=Button(wtc, text="SALVA", command=lambda: Salvataggio(p,var))
    b.pack(padx=10,pady=10)
    wtc.mainloop()

def inizializza():
    global ds
    global dt
    ds=np.load('settings.npy').item()
    if not(os.path.exists(r"timetable.npy")):
        dt={}
        dt["ORE_MAX_GIORNATA"]=ds["ORE_MAX_GIORNATA"]
        for x in range(1,ds["ORE_MAX_GIORNATA"]+2):
            for i in range (1,7):
                dt[(x,i)]=""
        np.save('timetable.npy', dt)
    dt=np.load('timetable.npy').item()
#Creazione finestra
def creaFinestra():
    inizializza()
    wt=Toplevel()
    wt.title("Orario scolastico - School Life Diary")
    wt.iconbitmap('sld_icon_beta.ico')
    wt.geometry("%dx%d+%d+%d" % (600, 300, 600, 250))
    ft=Frame(wt)
    ft.pack()
    l1=Label(ft,text="Lunedì")
    l2=Label(ft,text="Martedì")
    l3=Label(ft,text="Mercoledì")
    l4=Label(ft,text="Giovedì")
    l5=Label(ft,text="Venerdì")
    l6=Label(ft,text="Sabato")
    l1.grid(row=0, column=1, pady=10, padx=5)
    l2.grid(row=0, column=2, pady=10, padx=5)
    l3.grid(row=0, column=3, pady=10, padx=5)
    l4.grid(row=0, column=4, pady=10, padx=5)
    l5.grid(row=0, column=5, pady=10, padx=5)
    l6.grid(row=0, column=6, pady=10, padx=5)
    i=1
    x=ds["ORE_MAX_GIORNATA"]
    for i in range(1,x+1):
        h=Label(ft, text=str(i)+"° ora")
        h.grid(row=i, column=0, padx=5, pady=5)
        i+=1
    for c in range(1,x+2):
        for i in range(1, 7):
            bh=Button(ft, text=dt[(c,i)], width=10, command=lambda: CambiaOrario((c,i)))
            bh.grid(row=i, column=c)
    wt.mainloop()
Come posso risolvere?
Grazie