2012-10-27 12 views
7

Jak uzyskać wartość zwracaną od A do C? Nie stosuję przy okazji klasy.Wartość zwracana przez python tkinter z funkcji użytej w poleceniu

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) 

Odpowiedz

3

Można zadzwonić C.set od wewnątrz funkcji 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

Krótka odpowiedź: nie można. Oddzwanianie nie może zwrócić niczego, ponieważ nie ma gdzie go zwrócić - z wyjątkiem pętli zdarzeń, która nie robi nic z wartościami zwracanymi.

W aplikacji opartej na zdarzeniach zwykle wystarczy ustawić atrybut dla klasy. Lub, jeśli jesteś początkującym, możesz ustawić zmienną globalną. Używanie zmiennej globalnej nie jest dobrym pomysłem na prawdziwy kod, który musi być utrzymany w czasie, ale jest w porządku do eksperymentów.

Tak więc, na przykład, od C wydaje się być zmienną globalną w swojej przykład, by zrobić coś takiego:

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

Łatwo jest po prostu zadeklarować globalnym.

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

Stare pytanie, ale większość odpowiedzi sugerowała zmienną globalną. Nie lubię używać zbyt wielu zmiennych globalnych w moich projektach, więc oto moje rozwiązanie.

Podczas zadeklarowania przycisku Tkinter można użyć funkcji lambda jako polecenia. Ta lambda może wchodzić w interakcje ze zmiennymi, które znajdują się w tej samej przestrzeni nazw co przycisk, który definiujesz. Pamiętaj o zdefiniowaniu tej zmiennej przed zainicjowaniem przycisku.

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) 

może trzeba mieć self jako argument dla button W zależności od organizacji projektu, ale idea jest taka sama. Polecenia Lambda są również przydatne do przekazywania argumentów do polecenia przycisku.

Powiązane problemy