Forum
>>
Programmazione Python
>>
GUI
>>
programmazione ad oggetti con Tkinter
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da stix77 |
2019-02-27 14:41:38 - programmazione ad oggetti con Tkinter
|
mi servirebbe una mano, non riesco a programmare ad oggetti con tkinter.
mi spiego meglio: attualmente per inserire una label e una textbox utilizzo 4 linee di codice che sono le seguenti label000A = Label(finestra, text="capacità annua impianto") label000A.place(x = 20, y = 40) textBox000 = Text(finestra, height=1, width=10) textBox000.place(x = 200, y = 40) e tutto funziona. il problema è che per comporre un'interfaccia che abbia 50 di quei campi, mi ritrovo a scrivere 50 x 4 = 200 righe di codice quando ne potrei scrivere solo 1 per oggetto passando tutti gli argormenti, tipo: oggetto1 = campo("capacità annua impianto",1,10,200,40) il problema è che non riesco a scrivere il codice della classe.. ho provato in mille modi c'è un anima pia che mi potrebbe aiutare? grazie |
|
Scritto da Daniele aka Palmux |
2019-02-27 15:38:03 - Re: programmazione ad oggetti con Tkinter
|
Ciao caro, ovviamente puoi creare una classe o una funzione, ma perché non mettere un bel ciclo con le tue quattro righe?
Pensaci, è una soluzione velocissima. Cya |
|
Scritto da stix77 |
2019-02-27 16:00:23 - Re: programmazione ad oggetti con Tkinter
|
grazie per il suggerimento... male che andava stavo anch'io pensando alla funzione, però in effetti il ciclo for mi risparmierebbe ancora maggiormente righe di codice da scrivere
adesso ci provo |
|
Scritto da Daniele aka Palmux |
2019-02-27 16:17:29 - Re: programmazione ad oggetti con Tkinter
|
Provaci, poi torna qui se non ti viene qualcosa che ci proviamo insieme.
Cya |
|
Scritto da RicPol |
2019-02-27 17:23:29 - Re: programmazione ad oggetti con Tkinter
|
Uhm, qualche osservazione sparsa.
Primo, una finestra con 50 textbox è la morte della user experience (e probabilmente anche la morte dell'user). Secondo, in qualche modo *devi* cominciare a usare le classi per organizzare quel codice... non puoi certo continuare a sbattere tutto a livello di modulo. Una buona padronanza dei principi dell'OOP è fondamentale per scrivere gui. Terzo, non è che ti danno dei punti premio se scrivi codice più corto. Si fattorizza se ha senso farlo, e se si capisce perché lo si sta facendo. Se tutto ciò che ottieni usando un ciclo for è poter dire a te stesso "guarda come sono cool, ho usato un ciclo for per risparmiare cento righe di codice", allora non vale la pena. Il problema delle 50 caselle è un problema di componentistica OOP, non di come fare a risparmiare righe di codice. Quarto, non usare il posizionamento assoluto, usa i sizer. Quinto, certamente *puoi* fare un ciclo for che ti produce e ti posiziona 50 caselle e 50 etichette, *ma allora* devi anche usare una struttura-dati parallela (che so, una lista), dove conservare un riferimento alle 50 caselle... perché poi suppongo che dovrai accedervi in un secondo momento per leggerne il valore, no? E se ti limiti a fare una cosa del tipo: for _ in range(50): tb = Text(bla bla) tb.place(bla bla)allora ovviamente a ogni ciclo perdi il riferimento alla casella che hai appena piazzato. https://pythoninwindows.blogspot.com/p/i-miei-libri.html : i miei libri
https://pythoninwindows.blogspot.com : il mio blog |
|
Scritto da stix77 |
2019-02-27 19:30:49 - Re: programmazione ad oggetti con Tkinter
|
allora ho provato a buttare giù il codice ma mi sono incartato nel senso che non riesco a passare correttamente i dati nel ciclo for
from tkinter import * finestra = Tk() w, h = finestra.winfo_screenwidth(), finestra.winfo_screenheight() finestra.geometry("%dx%d+0+0" % (w, h)) finestra.title("title") dati1 = ["capacità annua impianto",20,40,200,40,"Ton/anno",300,40] dati2 = ["capacità oraria impianto",420,40,640,40,"kg/h",740,40] dati3 = ["calore di reazione",420,70,640,70,"kcal/h",740,40] for i in range(1,4): nameObject = "label"+str(i) nameObject = Label(finestra, text= dati1[0 ]) nameObject.place(x = dati1[1 ], y = dati1[2 ]) nameObject = Text(finestra, height = 1, width=10) nameObject.place(x = dati1[3 ], y = dati1[4 ]) nameObject = Label(finestra, text=dati1[5 ]) nameObject.place(x = dati1[6 ], y = dati1[7 ]) finestra.mainloop() finora ho scritto quanto sopra, ho provato a creare 3 textbox e funziona solo con la prima, non riesco a fargli flottare le liste di dati all'interno del ciclo for se ci provo con un generico dati=dati+str(i) poi all'interno del ciclo dati1 non lo riconosce come la lista che ho scritto prima del ciclo perchè ad esempio dati1[1 ] non è 20 ma per lui è "a" cioè mi indicizza la stringa |
|
Scritto da stix77 |
2019-02-27 19:36:54 - Re: programmazione ad oggetti con Tkinter
|
la questione è che ho circa 30 caselle di input che mi restituiscono 20 caselle di output. ho già fatto qualcosa di simile ma qui che sono arrivato a implementare 6 caselle, mi sono reso conto che il codice stava diventando veramente lungo (anche perchè contiene formule, grafici, ecc) e volevo renderlo più leggibile con l'oop, ma non facendolo di professione è tutto molto ostico..
|
Pagina: 1
Esegui il login per scrivere una risposta.