Forum
>>
Programmazione Python
>>
GUI
>>
Problema a salvare un file di interi
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
|
Scritto da fabio75 |
2025-10-23 20:07:26 - Problema a salvare un file di interi
|
|
Salve ho il seguente problema: non riesco a creare un file che salvi una lista
di interi. app.values = app.freqa + app.mixa + app.freqb + app.mixb
if not self._model:
name = simpledialog.askstring('Nome modello', 'inserire il nome da assegnare', parent=self)
if not name:
return
self._model = os.path.join(self._cache, name + '.json')
if os.path.exists(self._model):
msg = 'Nome modello già in uso'
messagebox.showerror('Duplicazione', msg, parent=self)
return
for k in self._scales.keys():
sets = []
for i in range(len(self._scalesk)):
sets.append(self._scalesk.get())
app.valuesk = sets
try:
with open(self._model, 'w') as f:
json.dump(app.values, f)
except OSError as e:
msg = 'Errore salvataggio dati mixer:\n\n' + repr(e)
messagebox.showerror('Errore I/O', msg, parent=self)Aiutatemi a capire cos' è andato storto per favore. |
|
|
Scritto da Daniele aka Palmux ![]() |
2025-10-24 11:01:08 - Re: Problema a salvare un file di interi
|
|
Ciao caro, dunque proviamo a vedere qualche punto insieme.
Secondo me qui ci sono 3 cose da verificare prima di tutto: -- Tipi dei dati json.dump vuole roba serializzabile: la tua app.values è davvero lista di int? (prova: print(type(app.values), app.values[:5])) -- Refusi/indici in quel blocco ci sono self._scalesk e app.valuesk: volevi dire self._scalesk e magari salvare in una struttura per chiave? Stai chiamando .get() sul widget giusto o sulla lista? -- Percorso file la cartella self._cache esiste quando apri il file? (se no: os.makedirs(self._cache, exist_ok=True))Se vuoi testare l’I/O isolato (senza Tk/interfaccia), prova solo questo micro-test: import json
open("test.json","w").write(json.dumps([1,2,3]))
Fai sapere se trovi la strada. Cya |
|
|
Scritto da fabio75 |
2025-10-24 21:15:27 - Re: Problema a salvare un file di interi
|
Il test ha funzionato quindi è un problema di chiavi ma non capisco dove.
Ti invio il sorgente completo così capisci. get() è su lista a quanto pare. Sono riuscito a mettere a posto il comando save: def _on_save(self):
app.values = app.freqa + app.mixa + app.freqb + app.mixb
print(app.values)
if not self._model:
name = simpledialog.askstring('Nome modello', 'inserire il nome da assegnare', parent=self)
if not name:
return
self._model = os.path.join(self._cache, name + '.json')
if os.path.exists(self._model):
msg = 'Nome modello già in uso'
messagebox.showerror('Duplicazione', msg, parent=self)
return
for k in self._scales.keys():
sets = []
for i in range(len(self._scalesk)):
sets.append(self._scalesk.get())
#app.valuesk = sets
try:
with open(self._model, 'w') as f:
json.dump(app.values, f)
except OSError as e:
msg = 'Errore salvataggio dati mixer:\n\n' + repr(e)
messagebox.showerror('Errore I/O', msg, parent=self)
return
Dimmi che te ne pare. Ho tolto #app.valuesk = setse mi salva il modello su file. --- Ultima modifica di fabio75 in data 2025-10-24 21:18:06 --- --- Ultima modifica di fabio75 in data 2025-10-24 21:18:50 --- --- Ultima modifica di fabio75 in data 2025-10-26 06:50:49 --- --- Ultima modifica di fabio75 in data 2025-10-26 06:51:04 --- --- Ultima modifica di fabio75 in data 2025-10-26 06:51:51 --- --- Ultima modifica di fabio75 in data 2025-10-26 06:52:14 --- --- Ultima modifica di fabio75 in data 2025-10-26 06:52:34 --- --- Ultima modifica di fabio75 in data 2025-10-26 06:53:09 --- |
|
|
Scritto da fabio75 |
2025-10-26 08:18:22 - Re: Problema a salvare un file di interi
|
|
Mi da errore quì:
def _on_open(self): sets = [] model = select_model(self, self._cache) if not model: return self._model = os.path.join(self._cache, model + '.json') try: with open(self._model) as f: app.values = json.load(f) except OSError as e: msg = 'Errore salvataggio dati mixer:\n\n' + repr(e) messagebox.showerror('Errore I/O', msg, parent=self) return for k in self._scales.keys(): for i in range(len(self._scalesk)): print(app.values) self._scalesk.set(app.values) #mi da errore quì Aiutami a capire che cosa c' è che non va, errore: 1500
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
return self.func(*args)
File "/media/fabio/6CA2E3C5A2E3923E/Progetti con eagle/SINTHETIZER/SOFTWARE/PC/prova.py", line 294, in _on_open
self._scalesk.set(app.values)
AttributeError: 'list' object has no attribute 'set'
RISOLTO self._scalesk.set(app.values) Era un problema di indici. --- Ultima modifica di fabio75 in data 2025-10-26 08:25:28 --- --- Ultima modifica di fabio75 in data 2025-10-26 08:26:13 --- |
|
|
Scritto da fabio75 |
2025-10-26 08:56:32 - Re: Problema a salvare un file di interi
|
|
Ora però mi succede una cosa strana con il codice allegato:
Se carico con open() modello1 funziona e mi setta gli sliders, mentre se carico modello2 mi da il seguente errore: Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
return self.func(*args)
File "/media/fabio/6CA2E3C5A2E3923E/Progetti con eagle/SINTHETIZER/SOFTWARE/PC/prova.py", line 292, in _on_open
self._scalesk.set(app.values)
File "/usr/lib/python3.10/tkinter/__init__.py", line 3507, in set
self.tk.call(self._w, 'set', value)
_tkinter.TclError: expected floating-point number but got "1500 1500 1500 1500 1500"
infine se carico modello3 mi funziona lo stesso e mi mette gli sliders tutti a 0 come previsto dal file modello3.
Carico i tre modelli più il sorgente. Fammi sapere. |
|
|
Scritto da Daniele aka Palmux ![]() |
2025-10-26 23:24:00 - Re: Problema a salvare un file di interi
|
|
Fabio, nel modello2 app.values contiene più numeri in una stringa (“1500 1500 1500…”), ma .set() accetta un solo float.
Controlla, se devi gestire più slider, fai un ciclo su ciascun valore; se ne hai solo uno, prendi il primo numero della stringa. Prova e fai sapere se era quello il problema. |
|
|
Scritto da fabio75 |
2025-10-28 13:06:06 - Re: Problema a salvare un file di interi
|
|
Risolto il problema riguardo values: ti allego prova.py.
Una volta risolto il problema nn mi da errori ma nn mi setta gli sliders una volta caricato un file "corretto". Non capisco perchè, dai un'occhiata al sorgente. Fai alcune prove pure te se hai il tempo. --- Ultima modifica di fabio75 in data 2025-10-28 13:06:37 --- --- Ultima modifica di fabio75 in data 2025-10-28 13:07:12 --- |
|
|
Scritto da Daniele aka Palmux ![]() |
2025-10-28 14:39:04 - Re: Problema a salvare un file di interi
|
|
Ciao Fabio, la configurazione è ok, il problema è nel caricamento: quando fai l’Open stai settando gli slider leggendo sempre dall’inizio della lista (values[ i ]) senza tenere conto dei 4 blocchi concatenati (freqA, mixA, freqB, mixB).
Ti serve usare gli offset giusti per ogni gruppo. In più, in “Save As” stai toccando values come se fosse una matrice (values[k] = sets), mentre il file salvato deve restare una lista piatta con tutti i 18 valori in sequenza. Per risolvere andrei in questa direzione: -- calcola gli offset per i 4 gruppi e, in Open, fai set(values[offset + i]) per ogni slider del gruppo. -- in salvataggio, scrivi sempre la lista piatta freqA + mixA + freqB + mixB. -- opzionale ma utile: verifica che il JSON abbia esattamente 18 valori prima di settare gli slider. Così gli slider si allineano al file caricato. |
Pagina: 1
Esegui il login per scrivere una risposta.

