Forum >> Programmazione Python >> GUI >> Problema a estrapolare posizione slader in una variabile in tkinter

Pagina: 1 2 Avanti

Salve sono un principiante di python ed allego il codice che visualizza con tkinter degli slader.

Come vedete ci sono tre tipi di slader, dei quali devo estrarne la posizione e metterla in una variabile per poi elaborarne il valore in un secondo file .py.

Le ho provate tutte e non riesco a trovare il modo di mettere in delle variabili le posizioni degli slader.

Aiutatemi per favore!

Grazie.








--- Ultima modifica di fabio75 in data 2024-06-09 09:26:42 ---

--- Ultima modifica di fabio75 in data 2024-06-09 09:27:31 ---
Allegati
Ciao @Fabio75




Non considerare quanto segue una critica, ma vedo che malgrado siano passati quasi due anni dal post qui concluso, i progressi da Te conseguiti nell'apprendimento del linguaggio sono stati insufficienti per renderTi operativo, tanto sotto il punto di vista OOP quanto riguardo il linguaggio python stesso, inoltre è evidente una macroscopica lacuna circa il funzionamento delle interfacce grafiche in genere, riferisco al tentativo di costruzione del menu :

if __name__ == '__main__':
    #crea finestra
    app = MainWin()
    ...
    app.mainloop()

    #crea menu "File"
    menubar1 = tk.Menu(app, background = "black", fg="white") 
    filemenu1 = tk.Menu(menubar)
    filemenu1.add_command(label="Open")
    filemenu1.add_command(label="Save")
    menubar.add_cascade(label="LFO1 function", menu=filemenu1)
    app.config(menu=menubar1)
    app.config(menu=menubar)
    app.mainloop()
In TUTTI i framework grafici, l'avvio delle finestre grafiche (il mainloop, per intenderci) avviene in un thread bloccante, ciò sta a significare che il codice che segue il mainloop non viene eseguito sin quando non di esce dal mainloop stesso, e nel momento che esci le finestre stesse cessano di esistere.

Ciò puoi verificarlo con mano lanciando il Tuo codice, alla chiusura della finestra riceverai :

Exception in Tkinter callback
...
_tkinter.TclError: can't invoke "menu" command: application has been destroyed

riguardo agli svariati errori per indice errato che ricevi quando provi ad utilizzare i widget "scale", purtroppo vi è una grave incomprensione del codice che a suo tempo Ti proposi, quel modello aveva sua ragion d'essere così come era, non può essere traslato (per altro con alcuni errori concettuali) nello scenario che cerchi di realizzare senza profonde modifiche.

Ora, potrei anche manipolare il codice da Te proposto e postarTi un esempio funzionante ma credo sia inopportuno, Ti nasconderebbe ciò che avviene a livello di ragionamento e stesura del codice, confonderebbe le idee affrontare tutto in una volta, non Ti porterebbe a comprendere.

Ti suggerirei di provare a realizzare l'esposizione dei valori per un singola singola coppia label/scale, poi due coppie ed, in fine passare ad articolazioni più complesse, penso che un tale studio potrebbe aiutarTi a comprendere come varia la problematica aumentando la complessità della GUI ed escogitare appropriate metodologie per affrontare le cose.




Fermo restando che, se lo richiedi, sarei anche disposto a fartelo l'adattamento per rendere il Tuo codice funzionante, credo sia meglio per Te affrontare la problematica mediante lo studio sopra detto, si è comunque qua, se occorre.




Ciao

Fatti non foste a viver come bruti...
Scusami ma ho avuto altro da fare in questi due anni oltre a studiare il linguaggio, abbi pazienza, ma non faccio ste cose per lavoro.

Chiedo solo un aiuto.

Scusate se mi intrometto,

se non ho capito male devi spostare dei dati da un file py a un secondo file py.

Io proverei con la creazione di un file csv di appoggio.

con il primo py scrivo i dati sun un file appoggio.csv e con il secondo file py vado a leggere i dati che mi servono.


creare file








Spero di avere interpretato giusto quello che ti serve.




Saluti

Scusami ma ho avuto altro da fare in questi due anni oltre a studiare il linguaggio, abbi pazienza, ma non faccio ste cose per lavoro.

Chiedo solo un aiuto.
Non scusarti, comprendo benissimo, comunque, pur avendo realizzato alcuni programmi utilizzati sul lavoro per oltre vent'anni, neanche io programmo per lavoro, solo per divertimento.




Se l'aiuto che chiedi è rendere quel Tuo codice "funzionale", chiarisci alcuni punti :

1° - i tkinter.Scale dei pannelli "LF01 for FM (Hz)" e "Mixer (ohms x 10)" non presentano etichette, dovrebbero averle?, se si, come dovrebbero essere?;

2° - le etichette, tra cui le "ADSRV" e "12345", andrebbero aggiornate con i valori dei rispondenti controlli scale?

3° - cosa vorresti scaricare/caricare nel file in cui serializzi i dati?

4° - perché due file python distinti, utilizzi due diverse applicazioni? perche? e cosa si aspetta di leggere la seconda applicazione?




Rispondi a dette domande ed anche se credo che Ti servirà a ben poco vedrò di fornirti un codice funzionante.




Se è altro l'aiuto che chiedi, specifica cosa.




Ciao

Fatti non foste a viver come bruti...
Allora il mio scopo è per il momento salvare in una variabile per ciascun slader (meglio un array per gruppo di slader) la rispettiva posizione.

Tali variabili saranno dichiarate in un secondo file .py chiamato tastiera.py.

Detto file sarà incluso con import da SINTHETIZER.py.

Lo scopo di tastira.py è calcolare le frequenze delle armoniche partendo dal valore dei rispettivi slader e il tasto premuto della rispettiva nota in una tastiera PC.

Tastiera.py sarà fatto da una classe e due oggetti istanziati chiamati scheda1 e scheda2 (rispettivamente la parte sx e quella dx della scheda del mio progetto).

In un secondo momento salverò le combinazioni degli slader per comodità in alcuni file che riproducono con tali combinazioni i vari timbri armonici.


Tali file verranno aperti per comodità per impostare gli slader.



1 - No non devono averne.





2 - No sono etichette con valori fissi e tali devono rimanere.




3 - Nei file aperti da SINTETHIZER.py e tasiera.py devo caricare le variabili degli inviluppi e combinazione di armoniche per ottenere un determinato strumento.




4 - SINTHETIZER.py è l'interfaccia grafica come vedi, mentre tastiera.py calcola il valore delle frequenze delle armoniche a partire dai valori dei rispettivi slader e del tasto PC premuto, ottenendo una nota specifica.








--- Ultima modifica di fabio75 in data 2024-06-10 18:21:52 ---

--- Ultima modifica di fabio75 in data 2024-06-10 18:23:56 ---
Ok, allora Ti è sufficiente un esempio su come gestire tutti gli scale salvando le impostazioni fatte.

Per dar seguito a quanto da Te esposto circa le Tue necessità, ho valutato opportuno l'utilizzo di dizionari, tanto per memorizzare i widget scale secondo chiavi relative

        self._scales = {'adsrv': [],
                        'freqs': [],
                        'mixer': [],
                        'lfo1' : []}

Quanto per la memorizzazione delle impostazioni effettuate, popolate utilizzando analoghe chiavi.

Per la serializzazione dei dati ritengo sia il caso di utilizzare json.


L'esempio che Ti allego Ti permette di salvare dei "modelli" di frequenza in una sotto-directory che viene creata nella direttrice contenente lo script, ho conservato l'aspetto grafico, inserendo un menu approssimativamente analogo a quello che cercavi di fare Tu, ma la logica è completamente cambiata, quella da Te impostata non era idonea.

I modelli salvati possono essere richiamati, allo scopo ho effettuato un sub-classamento di tlinter.simpledialog.Dialog che espone i soli nomi dei modelli memorizzati e permette di sceglierne uno, per poi modificarlo.

Guarda il metodo "_on_open" di MainWin per avere un esempio di come leggere i dati da file, "_on_save" per vedere come memorizzare in liste, e quindi in dizionari, i valori impostati nei widget scale.




Spero Ti sia utile, ciao



Fatti non foste a viver come bruti...
Allegati
Grazie funziona!!

Mi sei stato di grande aiuto, ora basta importare tastiera.py.

tastiera.py serve ad inviare gli array degli slader lungo la USB specifica


collegata all' ARDUINO UNO in questione.

Grazie mille. :ok:

Ho un problema: non riesco a capire qual'è il nome del dizionario per cui ad ogni modifica dello specifico slader mi permette di avere l'aggiornamento della specifica posizione.
Ho un problema: non riesco a capire qual'è il nome del dizionario per cui ad ogni modifica dello specifico slader mi permette di avere l'aggiornamento della specifica posizione.
Riferisci al codice di "sintetizer2.py" che Ti ho postato prima? Lo ho già scritto, è il dizionario
        self._scales = {'adsrv': [],
                        'freqs': [],
                        'mixer': [],
                        'lfo1' : []}
Le cui chiavi corrispondono ai "nomi" delle liste di etichette da Te definite
    adsrv = ['A', 'D', 'S', 'R','V',]
    freqs = ['1','2','3','4','5']
    mixer = ['1','2','3','4','5']
    lfo1 = ['lfo1']
ed i cui valori sono liste di oggetti tkinter.Scale costruiti nello stesso ordine delle etichette da Te impostate, puoi accedere agli specifici scale per nome ed indice, come puoi constatare nei metodi "MainWin._on_save()" e "MainWin._on_save_as()"
Ti preciso che, in quel codice, l'accesso ai valori degli scale avviene per i soli salvataggi o per il caricamento di dati già salvati, operazioni che vengono effettuate in cicli su chiavi del dizionario ed indici di lista corrispondente.
Supposto il Tuo problema correntemente posto sia di accedere ad uno specifico elemento delle liste da Te impostate, p.e. l'elemento "D" della lista "adsrv", banalmente, dovrai accedere allo scale di indice "1" della chiave "adsrv" del dizionario "self._scales", tipicamente useresti:
self._scales['adsrv'][1].get()
self._scales['adsrv'][1].set(valore)
per, rispettivamente, leggere ed impostare il valore corrente di detto specifico scale.

Analogamente, i "modelli", una volata caricati, non sono altro che un dizionario con le medesime chiavi nelle cui liste sono contenuti i valori degli scale corrispondenti.

In sostanza, banalmente, si opera con i metodi standard di dizionari e liste, niente di difficile imho.




EDIT: corretti artefatti introdotti dall'editor dei post



--- Ultima modifica di nuzzopippo in data 2024-06-18 06:10:44 ---
Fatti non foste a viver come bruti...


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.