[Python]Gestione widget Tkinter tramite funzioni

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

[Python]Gestione widget Tkinter tramite funzioni

Messaggio 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.
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
cortinico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 477
Iscrizione: venerdì 15 maggio 2015, 16:49
Desktop: Unity
Distribuzione: Ubuntu 15.04 amd64
Sesso: Maschile
Località: Pisa
Contatti:

Re: [Python]Gestione widget Tkinter tramite funzioni

Messaggio 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
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: [Python]Gestione widget Tkinter tramite funzioni

Messaggio 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).
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti