Forum
>>
Principianti
>>
CTkEntry e ciclo for
Pagina: 1 2 Avanti
Esegui il login per scrivere una risposta.
Scritto da Gabbo |
2024-02-07 15:21:17 - CTkEntry e ciclo for
|
Buongiorno a tutti,
ho utilizzato un ciclo for per realizzare 5 CTkEntry tutti uguali, ilprogramma funziona ma volevo sapere dalla vostra esperienza: - se è un operazione che si usa fare? - Se si, è possibile spostare i dati in una o più variabili? invio codice import customtkinter as ctk ctk.set_appearance_mode('dark') ctk.set_default_color_theme('blue') app = ctk.CTk() app.geometry('500x240') Gen_font = "Helvetica" Gen_size = 15 Pos_x=10 Pos_y=20 for n in range(5): riga = n * 30 Tl = ctk.CTkLabel(master=app, width=50, height=25, text="T"+str(n + 1), font=(Gen_font,Gen_size)) Tl.place(x = Pos_x , y = Pos_y+ riga) for n in range(5): riga = n * 30 T1 = ctk.CTkEntry(master=app, placeholder_text="°C", width=50, height=25, corner_radius=10, fg_color=("blue"), justify='center') T1.place(x = Pos_x + 50 , y = Pos_y + riga) app.mainloop()Saluti |
|
Scritto da nuzzopippo |
2024-02-07 17:26:58 - Re: CTkEntry e ciclo for
|
"Si usa fare?" : dipende dalla finalità, in alcune circostanze può essere comodo farlo ed in altre invece no
"è possibile spostare i dati in una o più variabili?": indubbiamente, anche se si potrebbe tranquillamente farne a meno Entrambe le operazioni nelle Tue domande hanno risposta nelle necessità a cui deve essere data soluzione, ad esempio: anche se per Entry del tkinter "ordinario" pochi giorni fa in questo post ho utilizzato proprio una tecnica del genere per definire delle entry (da me subclassate) per delle operazioni di gestione della loro attivazione e controllo del loro focus, trovi le istruzioni relative nella __init__ della classe Win, al primo ciclo for, la mia finalità era semplicemente mostrare un esempio di intercettazione del focus nel tragitto "widget => frame" e la risposta degli oggetti fi classe "ActivableEntry" attivati o meno. ... Ovviamente, per le Tue operazioni dovrai strutturare il Tuo codice in modo tale da poter accedere alla memorizzazione delle singole CTkEntry create. Fatti non foste a viver come bruti... |
|
Scritto da Gabbo |
2024-02-08 09:01:54 - Re: CTkEntry e ciclo for
|
Scusa ma l'esempio del link non riesco a capirlo.
Pensavo ci fosse un comando semplice tipo: T11 = variabile1 T12 = variabile2 ma purtoppo ho provato ma non funziona.. Se è troppo complicato torno all'esecuzione di ogni singolo entry.. |
|
Scritto da nuzzopippo |
2024-02-08 18:09:03 - Re: CTkEntry e ciclo for
|
Mi dispiace vivamente dirlo ma quell'esempio che non hai capito va sul "molto semplice", almeno per le necessità inerenti la programmazione di una interfaccia utente ... Ti suggerirei di fare almeno una lettura accorta del capitolo 9 del Tutorial di python (tutto è sempre meglio) per cercare di capire le classi per poi riguardarTi il codice ... tieni persente che in python TUTTO è un oggetto.
Purtroppo, senza conoscenza della OOP e della programmazione ad eventi si fa poca strada nel costruire GUI. Per altro, pur se carino CustomTkinter è ben lungi dall'essere efficiente, puoi utilizzarlo per "cosette" ms appena vai un pochino sul serio zoppica, ho passato l'intero pomeriggio per cercare di farTi un esempio su come utilizzare la Tua metodologia di codifica solo per constatare che i CTkButton saranno anche carini ma non supportano correttamente il binding (parliamo di eventi) sotto Ti metto il codice di test, provalo, vi è un esempio di interazione con le CTkEntry, tieni presente che come è esposto è funzionante, lancialo da terminale così come è impostato (con uso di pulsanti tkinter.Button) vedrai che funziona, potrai inserire dei valori nella CTkEntry rossa e poi trasferire il valore inserito alla entry corrispondente al pulsante scelto, in questa modalità vedrai che la funzione "on_button" che provvede alla operazione, Per contro, commenta la riga: bt = Button(pn_inp, width=10, text='T'+str(i+1))e togli i tripli apici al blocco di codice che la sovrasta, costruirai la finestra con bottoni CTkButton ma essi non funzioneranno, da una miriade di test fatti il binding viene richiamato solo in fase di costruzione e non più applicato, salvo casi semplici che non prevedono parametri ... un framework molto azzoppato quello che utilizzi imho. L'esempio : import customtkinter as ctk from tkinter import Button # funzione di callback #def on_button(idx=None): def on_button(evt=None): w = evt.widget idx = btn.index(w) tl_list[idx].delete(0, 'end') # ripulisco la corrispondente casella value = e_inp.get() # leggo il valore inserito tl_list[idx].insert('end', value+'°') # costruzione finestra ctk.set_appearance_mode('dark') ctk.set_default_color_theme('blue') app = ctk.CTk() #app.geometry('500x240') Gen_font = "Helvetica" Gen_size = 15 pn_data = ctk.CTkFrame(app) pn_data.grid(row=0, column=0) for n in range(5): Tl = ctk.CTkLabel(master=pn_data, width=50, height=25, text="T"+str(n + 1), font=(Gen_font,Gen_size)) Tl.grid(row=n, column=0, padx=5, pady=5) tl_list = [] for n in range(5): T1 = ctk.CTkEntry(master=pn_data, placeholder_text="°C", width=50, height=25, corner_radius=10, fg_color=("blue"), justify='center') T1.grid(row=n, column=1, padx=5, pady=5) tl_list.append(T1) # creo un pannello per l'input dei dati pn_inp = ctk.CTkFrame(app) pn_inp.grid(row=0, column=1) lbl = ctk.CTkLabel(master=pn_inp, text='Valore da inserire:') lbl.grid(row=0, column=0, padx=5, pady=5, sticky='w') e_inp = ctk.CTkEntry(master=pn_inp, width=50, height=25, corner_radius=10, fg_color=("red"), text_color=('yellow'), justify='center') e_inp.grid(row=0, column=1, padx=5, pady=5, sticky='w') lbl = ctk.CTkLabel(master=pn_inp, text='Applica a:') lbl.grid(row=0, column=3, rowspan=5, padx=5, pady=5, sticky='w') # creo dei pulsanti di comando per trasferire i dati btn = [] for i in range(5): '''bt = ctk.CTkButton(master=pn_inp, width=100, height=25, corner_radius=10, text='T'+str(i+1), fg_color=('gray', 'green'), text_color=('yellow'), state='normal', #command=on_button(int(i)) )''' bt = Button(pn_inp, width=10, text='T'+str(i+1)) btn.append(bt) bt.grid(row=i, column=4, padx=5, pady=5) [x.bind('<Button>', on_button) for x in btn] bt = ctk.CTkButton(master=app, height=25, corner_radius=10, text='Esci dalla applicazione', text_color=('yellow'), command=app.destroy) # pulsante chiusura applicazione bt.grid(row=5, column=0, columnspan=2, padx=5, pady=5, sticky='ew') app.mainloop()Ciao Edit: riedittato il post per togliere degli artefatti inseriti dall'editor dei post. --- Ultima modifica di nuzzopippo in data 2024-02-08 18:22:36 --- Fatti non foste a viver come bruti... |
|
Scritto da Gabbo |
2024-02-08 19:12:57 - Re: CTkEntry e ciclo for
|
Sei un Mito...
Ho utilizzato il tuo suggerimento di codice ed inserendo la riga: tl_list = []ed inserendo la variabile nel cliclo for ottengo il risultato di avere i dati di input: tl_list.append(T1)questo mi permette poi di utilizzare i valori di input della Entry. Giro il codice completo: import customtkinter as ctk ctk.set_appearance_mode('dark') ctk.set_default_color_theme('blue') app = ctk.CTk() app.geometry('500x240') Gen_font = "Helvetica" Gen_size = 15 Pos_x=10 Pos_y=20 def salva(): global Val_T r = tl_list0.get() r1 = tl_list1.get() r2 = tl_list2.get() r3 = tl_list3.get() r4 = tl_list4.get() for n in range(5): riga = n * 30 Tl1 = ctk.CTkLabel(master=app, width=50, height=25, text=tl_listn.get(), font=(Gen_font,Gen_size)) Tl1.place(x = Pos_x +100 , y = Pos_y+ riga) for n in range(5): riga = n * 30 Tl = ctk.CTkLabel(master=app, width=50, height=25, text="T"+str(n + 1), font=(Gen_font,Gen_size)) Tl.place(x = Pos_x , y = Pos_y+ riga) tl_list = [] for n in range(5): riga = n * 30 T1 = ctk.CTkEntry(master=app, placeholder_text="°C", width=50, height=25, corner_radius=10, fg_color=("blue"), justify='center') T1.place(x = Pos_x + 50 , y = Pos_y + riga) tl_list.append(T1) VFin0 = ctk.CTkButton (app, text="salva", command = salva) VFin0.place(x = 10 , y=200) app.mainloop()Sicuramente hai ragione sul fatto che sono alle prime armi , ma mi piace sperimentare. Sicuramente andrò a studiare il capitolo che mi hai suggerito. Grazie sicuramente avrò altre domande da porre... |
|
Scritto da Gabbo |
2024-02-08 19:18:12 - Re: CTkEntry e ciclo for
|
purtroppo vedo che il codice copiato ha delle lacune:
r = tl_list0.get() r1 = tl_list1.get() r2 = tl_list2.get() r3 = tl_list3.get() r4 = tl_list4.get() il numero (dopo tl_list) 0 è racchiuso tra parentesi quadre [ ] anche 1 - 2 - 3 - 4 ho visto anche questo: text=tl_listn.get(), in realtà : text=tl_list[ n ].get() --- Ultima modifica di Gabbo in data 2024-02-08 19:20:20 --- --- Ultima modifica di Gabbo in data 2024-02-08 19:21:08 --- --- Ultima modifica di Gabbo in data 2024-02-08 19:25:48 --- |
|
Scritto da Gabbo |
2024-02-08 19:27:57 - Re: CTkEntry e ciclo for
|
sto provando a reinserire il codice, ma non riesco...
--- Ultima modifica di Gabbo in data 2024-02-08 19:31:23 --- |
|
Scritto da Daniele aka Palmux |
2024-02-14 10:15:11 - Re: CTkEntry e ciclo for
|
Ciao, intendi su questo forum? Nel caso usa strumenti come Pastebin, ma ce ne sono ormai millemila, degno di nota uno degli ultimi nati.
Alla fine qui posta solo il link, forse è meglio per tutti vista la nostra non eccelsa qualità nella formattazione... e sono stato buono. Cya |
|
Scritto da Gabbo |
2024-02-14 10:58:18 - Re: CTkEntry e ciclo for
|
Forse utilizzo un metodo errato.
Questi sono i miei passaggi: 1 - copio il codice su Visual Studio Code 2 - clicco sull'icona "<>" che si trova prima del quadrato di colore nero (nel forum) 3 - incollo senza formattazione il codice nela riga grigia il codice si vede corretto, ma quando viene inviato spariscono le parentesi quadre e appaiono dei punti di domanda. Vi è mai successo? Saluti Fabio |
|
Scritto da Daniele aka Palmux |
2024-02-14 11:42:16 - Re: CTkEntry e ciclo for
|
Ciao caro, aggiungi una \ davanti alle parentesi.
# Senza.. a0 # Con.. a[0] Cya |
Pagina: 1 2 Avanti
Esegui il login per scrivere una risposta.