2013-04-25 13 views
11

Jestem początkującym programistą Pythona i nadal próbuję znaleźć zastosowanie lambda. Został worrking na jakimś gui programu po znacznie googlowania Pomyślałem, że muszę to wykorzystać do przycisków, aby działać jak trzeba goTypeError: <lambda>() nie przyjmuje żadnych argumentów (1 podany)

to działa

mtrf = Button(root, text = "OFF",state=DISABLED,command = lambda:b_clicked("mtrf")) 

ale kiedy zrobić to samo dla skalować nie działa

leds = Scale(root,from_=0,to=255, orient=HORIZONTAL,state=DISABLED,variable =num,command =lambda:scale_changed('LED')) 

Odpowiedz

29

Scale wywołuje funkcję przekazany jako command z jednym argumentem, więc trzeba z niego korzystać (choć TH odłóż je natychmiast).

Zmiana:

command=lambda: scale_changed('LED') 

do

command=lambda x: scale_changed('LED') 
+12

'_' jest tradycyjnie stosowany jako zniszczyć ker "nieużywanego argumentu": 'command = lambda _: scale_changed ('LED')' – monoid

4

Jest to prawdopodobnie dlatego, że polecenie zostanie przekazany argument, że być może nie chcesz. Spróbuj zmienić lambda od

command=lambda:scale_changed('LED') 

do

command=lambda x:scale_changed('LED') 
2

Należy skonsultować Tkinter documentation:

Scale widget

command - A procedure to be called every time the slider is moved. This procedure will be passed one argument, the new scale value. If the slider is moved rapidly, you may not get a callback for every possible position, but you'll certainly get a callback when it settles.


Button widget

command - Function or method to be called when the button is clicked.

zmienić lambda do

command=lambda new_scale_val: scale_changed('LED') 
Powiązane problemy