2012-12-19 9 views
12

Ho scritto un programma in Python con un front-end GUI tkinter. Quando viene eseguito dallo script, non ci sono problemi.Impossibile impostare il valore con lo script tkinter/python quando si utilizza cxfreeze

L'ho impacchettato usando cx_freeze in un file exe e l'esecuzione da lì funziona per la maggior parte del programma. Tuttavia, ha un problema: quando si prova ad assegnare un valore ad un oggetto StringVar in una delle funzioni viene sollevata un'eccezione e si uccide il programma.

Quando si accede alla stessa funzione da un punto diverso del programma, funziona normalmente. Qualche idea di cosa potrebbe essere sbagliato?

La sezione di codice che causa il problema è il seguente (ho aggiunto il messagebox così ho potuto vedere quello che non è riuscito a):

if keyDetail.get('default', False): 
    try: 
     self.entries[key].set(keyDetail['default']) 
    except Exception as err: 
     messagebox.showinfo('error', 'key: %s, default: %s, error: %s'%(key, keyDetail['default'], err)) 

self.entries[key] è un tk.StringVar.

Quando questo viene eseguito, ottengo il seguente messaggio nella messagebox:

key: orderNo, default: Order Number, error: can't set "PY_VAR16:0"

+0

Non sono sicuro del motivo per cui Tcl non riuscirebbe a impostare un valore per una variabile che non è array, perché finirebbe per creare una variabile anche se non esistesse. Ma se non è troppo tardi per il tuo programma, il mio consiglio è di abbandonare l'uso delle variabili Tcl; non hai bisogno di quello nel tuo codice Python. Inoltre, ti piacciono le variabili globali? Quando crei una variabile Tcl tramite Tkinter, crei sempre variabili globali (senza che tu lo sappia esplicitamente). Se fossi in puro codice Tcl, la creazione di variabili (locali) è indispensabile, ma hai già cose simili in Python. Puoi organizzare l'uso di Tkinter con loro. – mmgp

+0

@mmgp hai bisogno delle variabili Tcl per cose come l'attivazione di eventi quando una variabile cambia. – korylprince

+0

@Trengot: puoi incollare qui le altre parti del tuo codice o su pastebin? Penso che le cose di cui sopra non siano sufficienti per cogliere il problema. –

risposta

0

Vedi sopra per la descrizione del problema. Errore non:/questa sezione di codice.

+0

Se l'errore non era questa sezione di codice, basta rimuovere la domanda o modificarla in modo che abbia senso. – nbro

Problemi correlati