Pagina 1 di 1

[Python]Gestione widget Tkinter tramite funzioni

Inviato: domenica 31 maggio 2015, 19:10
da ubuntumate
Ciao a tutti!
Sto imparando a scrivere applicazioni grafiche con Tkinter,intanto mi sono sorti due dubbi:
1)Come posso fare ad accedere ad un widget e leggere/modificarne gli attributi?
2)Per associare un funzione da eseguire a un pulsante uso "command=Nome Funzione".Se passo NomeFunzione(),si avvia subito questa funzione.Come faccio a passare dei parametri senza che la funzione venga chiamata in automatico,senza che si verifichi la pressione del pulsante? Se vi è possibile,usate solo funzioni perché trovo le classi di Python troppo contorte rispetto a Java .
Qui del codice di esempio:

Codice: Seleziona tutto

#!/usr/bin/python3
import tkinter
def changeText():
       #cambia il testo in qualche modo

window = tkinter.TK()
confirm_button = tkinter.Button(window,text="Run",command=changeText).grid(row=1)
sample_label = tkinter.Label(window,text="").grid(row=0)
window.mainloop()
Grazie.

Re: [Python]Gestione widget Tkinter tramite funzioni

Inviato: domenica 31 maggio 2015, 23:00
da cortinico
Ciao,

Non sono un esperto di questa libreria, ma per fare quello che vuoi tu penso servano le variabili globali.
In particolare non puoi chiamare 'nomeFunzione()' perchè sennò la stai invocando, mentre se passi 'nomeFunzione' stai passando un riferimento a funzione.

Dovresti usare le Variable Classes di Tcl, guarda l'esempio che ti ho scritto qui:

Codice: Seleziona tutto

#!/usr/bin/python3
import tkinter

def changeText():
	label.set("Yes click")

window = tkinter.Tk()
label = tkinter.StringVar()
label.set("No click")

confirm_button = tkinter.Button(window,textvariable=label, command=changeText).grid(row=1)
sample_label = tkinter.Label(window,text="").grid(row=0)
window.mainloop()
Inoltre io darei un'occhiata a questo esempio qua:
http://www.tkdocs.com/tutorial/firstexample.html
È fatto molto bene e ti chiarisce un minimo le meccaniche di base.

Per quanto riguarda l'accesso agli attributi, prova a vedere qui:
http://effbot.org/tkinterbook/widget.htm

Trovi l'elenco di tutti i metodi degli oggetti di tipo Widget

Re: [Python]Gestione widget Tkinter tramite funzioni

Inviato: domenica 31 maggio 2015, 23:48
da Claudio_F
Se vi è possibile,usate solo funzioni perché trovo le classi di Python troppo contorte rispetto a Java .
Senza usare variabili globali si potrebbe fare anche così:

Codice: Seleziona tutto

#!/usr/bin/python3
import tkinter as tk
def changeText(widget, msg):
       widget.configure(text=msg)


def main():
    window = tk.Tk()
    confirm_button = tk.Button(window, text="Run" )
    confirm_button.grid(row=1)
    sample_label = tk.Label(window, text="")
    sample_label.grid(row=0)
    confirm_button.configure(
        command=lambda:changeText(sample_label, "ArribaArriba")
    )
    window.mainloop()


main()
Ma se non si struttura tramite classi ci si trova presto bloccati con i dati condivisi, che appunto si possono gestire tramite variabili di istanza (preferibile), tramite visibilità globale (non preferibile), tramite strutture dati mutabili liste/dizionari (compromesso tra le precedenti).