Discussione:
[Python] Inorridiamo! Python e TkInter usati come fossero Visual Basic
Francesco Maida
2016-12-08 19:11:04 UTC
Permalink
Salve, stavo cercando di capire i rudimenti di TkInter.
Venendo da anni di Visual Basic quello che non mi convince molto Ú il modo
con cui si accede al valore dei widget.
Faccio un esempio pratico con la cosa più semplice che ho trovato: le label.

Se voglio sapere il testo contenuto in una label devo scrivere:

testo = label.cget("text")

Se invece voglio modificare il testo di una label devo scrivere una cosa
diversa:

label.configure(text="<il nuovo testo della label>")

A me pareva un po assurdo avere due metodi per interrogare il valore di una
proprietà, così per protesta ho scritto una classe derivata da
tkinter.Label con una proprietà "text" che ha un get ed un set.
In questo modo posso scrivere cose del tipo:

testo = label.text
label.text = "Nuovo testo della label"

Qui se volete c'Ú l'esempio completo con la classe derivata ed
un'applicazione di prova che gira sotto Python 3:

https://gist.github.com/fmaida/ca8e43e1a75ab88e8ad6093ca42598cc


A me sembra 100 volte più semplice e intuitivo del sistema di TkInter, ma
forse mi sfugge qualcosa sulle buone abitudini della programmazione...


Ma secondo voi questa cosa che ho fatto Ú un'eresia oppure Ú una buona cosa?
Daniele Zambelli
2016-12-08 21:06:45 UTC
Permalink
Post by Francesco Maida
testo = label.cget("text")
Se invece voglio modificare il testo di una label devo scrivere una cosa
label.configure(text="<il nuovo testo della label>")
Si può usare anche quest'altro modo:

testo = etichetta['text']
etichetta['text'] = 'Nuovo testo della label'
Post by Francesco Maida
testo = label.text
label.text = "Nuovo testo della label"
I widget in tkinter sono visti come dizionari (se non l'hai ancora
fatto dà un'occhiata ai dizionari Python) i cui elementi sono coppie:

<nome del parametro> - valore

Ai parametri si può assegnare un valore anche al momento della
creazione del widget, quindi invece che scrivere le due istruzioni:

etichetta = Label(mioContenitore1)
etichetta['text'] = 'pippo'

si può scrivere direttamente:

self.etichetta = Label(mioContenitore1, text = 'pippo')

Puoi vedere il funzionamento in questo programma:

gist.github.com/danielezambelli/f53ba2f51bc2fb5891db5f6bda85dde2

che ho scritto partendo dalla documentazione:

linuxdidattica.org/docs/altre_scuole/msm_p/txs_01.html#widget-esempio-introduttivo

Spero che possa esserti utile.
--
Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
Francesco Maida
2016-12-09 10:11:34 UTC
Permalink
Il giorno 8 dicembre 2016 22:06, Daniele Zambelli <
Post by Daniele Zambelli
testo = etichetta['text']
etichetta['text'] = 'Nuovo testo della label'
Ah, ecco. Così in effetti la sintassi Ú decisamente più facile da ricordare.
Post by Daniele Zambelli
I widget in tkinter sono visti come dizionari (se non l'hai ancora
<nome del parametro> - valore
Ai parametri si può assegnare un valore anche al momento della
etichetta = Label(mioContenitore1)
etichetta['text'] = 'pippo'
self.etichetta = Label(mioContenitore1, text = 'pippo')
Sulle label hai ragione da vendere, Ú che in realtà mi erano venuti i
capelli dritti in testa leggendo un tutorial che spiegava come leggere e
scrivere il testo contenuto in un widget tkinter.Entry, in cui addirittura
non toccavano mai le proprietà dell'istanza ma piuttosto utilizzavano
un'istanza della classe tkinter.StringVar per fare da "ponte" fra il widget
e la sua proprietà text... ad occhio mi sembrava una complicazione
eccessiva.
Post by Daniele Zambelli
gist.github.com/danielezambelli/f53ba2f51bc2fb5891db5f6bda85dde2
linuxdidattica.org/docs/altre_scuole/msm_p/txs_01.html#
widget-esempio-introduttivo
Grazie mille, ora gli do un'occhiata.


Spero che possa esserti utile.
AltrochÚ. Grazie mille ancora.

Loading...