2011-11-25 10 views

Odpowiedz

25

To nazywa się natomiast parametry Button są przypisane:

command=Hello() 

Jeśli chcesz przekazać funkcję (nie jest to zwracana wartość) zalecana zamiast:

command=Hello 

w ogólnym function_name jest obiekt funkcji, function_name() jest cokolwiek powraca funkcyjnych. Zobacz, czy to pomaga dalej:

>>> def func(): 
...  return 'hello' 
... 
>>> type(func) 
<type 'function'> 
>>> type(func()) 
<type 'str'> 

Jeśli chcesz przekazać argumentów, można użyć lambda expression skonstruować bez parametrów wpłacone.

>>> hi=Button(frame, text="Hello", command=lambda: Goodnight("Moon")) 

Mówiąc najprościej, ponieważ Goodnight("Moon") jest w lambda, nie będzie wykonywać od razu, zamiast czekać, aż przycisk zostanie kliknięty.

+0

Dziękujemy! Oczywistym rezultatem jest; jak przekazywać argumenty? Teraz czytam o Lambdzie, wydaje się, że to może być po prostu odpowiedź. – wjakobw

+0

@wjakobw - przekazać argument do funkcji lub przekazać funkcję jako argument? W pierwszym przypadku zadeklarujesz argumenty w definicji funkcji ex: 'def func (par1, par2):' w drugim, po prostu użyj nazwy funkcji bez nawiasu, jak to opisałem w mojej odpowiedzi. Skoro jesteś co prawda nowy w pytonie, czy mogę zaproponować [to czytanie] (http://www.diveintopython.net/)? Jest łatwy do naśladowania i bardzo przyjemny. – mac

+1

Chciałbym przekazać zmienną jako argument po naciśnięciu przycisku. Zwykły sposób command = Hello (arg) nie zadziała, ponieważ wywołanie zwrotne zawiera następnie paranthezy i używa wartości zwracanej zamiast funkcji. * W powyższym przykładzie funkcja Hello nie przyjmuje żadnych argumentów, ale wyobraź sobie inny przypadek. – wjakobw

2

Można również użyć wyrażenia lambda jako argument polecenia:

import tkinter as tk 
def hello(): 
    print("Hi there!") 

main = tk.Tk() 
hi = tk.Button(main,text="Hello",command=lambda: hello()).pack() 
main.mainloop() 
+3

Lambda jest całkowicie niepotrzebna, jeśli nie przekazujesz argumentów. Możesz poprawić swoją odpowiedź, pokazując, jak używać lambda do przekazywania argumentów. –

Powiązane problemy