2012-10-27 20 views
7

come ottengo il valore restituito da A a C? A proposito, non sto usando la classe.python tkinter restituisce il valore dalla funzione utilizzata nel comando

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

risposta

3

Si può chiamare C.set dall'interno della funzione button:

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C.set(A) 
    # return A # return values are useless here 
7

Risposta breve: non si può. Le callback non possono restituire nulla perché non esiste un luogo dove restituirle, eccetto il ciclo degli eventi, che non fa nulla con i valori di ritorno.

In un'applicazione basata su eventi, ciò che generalmente si fa è impostare un attributo su una classe. Oppure, se sei un principiante, puoi impostare una variabile globale. L'uso di una variabile globale non è una buona idea per il codice reale che deve essere mantenuto nel tempo ma va bene per la sperimentazione.

Così, per esempio, dal momento che C sembra essere una variabile globale nel tuo esempio, si potrebbe fare qualcosa di simile:

def button(): 
    global C 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C = A 
2

è facile basta dichiarare una a livello globale.

def button: 
global A 
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
A = B.get() 
return A 

B = StringVar()` 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 
# and then A is not empty 
B= A 
0

Vecchia domanda, ma la maggior parte delle risposte ha suggerito una variabile globale. Non mi piace usare troppe variabili globali nei miei progetti, quindi ecco la mia soluzione.

Quando si dichiara il pulsante Tkinter, è possibile utilizzare una funzione lambda come comando. Questo lambda può interagire con variabili che si trovano nello stesso spazio dei nomi del pulsante che stai definendo. Assicurati di definire questa variabile prima di inizializzare il pulsante.

def button(): 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

Potrebbe essere necessario avere self come argomento per button a seconda della organizzazione del progetto, ma il concetto è lo stesso. I comandi Lambda sono anche utili per passare argomenti al comando del pulsante.

Problemi correlati