Wpis z mikrobloga

Wziąłem się za #kivy i trafiłem na problem, którego rozwiązania nie mogę znaleźć w sieci.
Chodzi mi o wywoływanie wcześniej zdefiniowanych funkcji, a raczej kwestie ich argumentów.

Jako dobry przykład może posłużyć ten plik: http://pastebin.com/VqY0k2jc

Chodzi o funkcje "printok()", którą wywołujemy gdy zmienia się tekst w okienku (linia 28). Nie rozumiem, dlaczego kiedy kod wygląda tak jak w pliku, to kod nie zadziała i dostaje błąd:
"printok() takes 0 positional arguments but 2 were given".
Tak jak jest teraz nie zadziała, chyba, że do funkcji printok() w linii 8 dołożę jakieś argumenty. Cokolwiek np. printok(arg1, arg2) wtedy cały kod się odpala.
Pytanie brzmi: dlaczego muszę do funkcji dodawać jakieś dwa argumenty i bez tego kod nie ruszy?

#python #naukaprogramowania
  • 10
  • Odpowiedz
@max1983: Bo to wywołanie następuje gdzieś z wnętrza biblioteki kivy. Widać istnieją tam pewne argumenty które są zawsze dodawane do tego typu wywołania. Próbowałeś je sobie z ciekawości wypisać, żeby zobaczyć co w nich jest?

  • Odpowiedz
@max1983: Odpowiedź jest dokładnie taka sama jak powyżej, tak po prostu wygląda to wywołanie i nic z tym nie zrobisz :D

Jak cię tak bardzo denerwuje dopisywanie to sobie wszędzie używaj def fun(*args)
A różne takie argumenty bywają przydatne, bo pewnie jednym z nich jest kto woła (jaka instancja) a czasem od tego zależy co trzeba zrobić.
  • Odpowiedz
@meohaw: Nie denerwuje mnie. ( ͡° ͜ʖ ͡°)
Po prostu nie rozumiem,do końca jak to działa.

Czyli rozumiem, że bind zawsze będzie chciało jakieś dwa argumenty, a action na buttonie zawsze jeden?
  • Odpowiedz
@max1983: printok(*args, **kwargs)


@Budek24: Nie zawsze, czasami lepiej nazwać te argumenty, jak chcemy z nich skorzystać - a często potrzebujemy (np. chcemy zmienić kolor, tego co zostało naciśnięte).
  • Odpowiedz