Ktoś ogarnia PyQt i pythona? ;x
for place in places:
place.btn = QtGui.QPushButton('go there', self)
place.btn.clicked.connect(partial(place.open_location))
places_form.addRow(QtGui.QLabel(str(i) + '. ' + place.address), place.btn)
place
to instancja klasy z zaimportowanego modułu, a open_location
to jej metoda. Dlaczego przycisk wywołuje tę metodę tylko wtedy, kiedy używam partial()
? Gdy mam po prostu place.btn.clicked.connect(place.open_location)
, to nie działa. Dlaczego? :<
@sens: nie znam za dobrze pythona, a PyQt w ogóle, ale ze strony C++ wygląda to tak, że musisz połączyć ze sobą obiekty emitujący sygnał i obiekt odbierający wygnał przez slot, jak tworzysz swoje sloty/sygnały to musisz je emitować. W c++ wygląda to tak:
QObject::connect(button, SIGNAL(pushed(), window, SLOT(receive PushedSignal()) ); //button i window to pointery, pushed(), received() to tez pointery, ale do metod
łączy to ze sobą akcję kliknięcia na przycisk z metoda odebrania sygnału, jak dobrze rozumiem partial to odpowiada on za poprawne połączenie ze sobą obiektów emitującego sygnał i odbierającego w slocie. Wygląda na to, że partial spełnia funkcję łącznika pomiędzy instancjami i metodami, "naprawia" brak pointerów w Pythonie(?). Dokładnie to nie wiem, ale tak to interpretuję ;)