sens
g/Python

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? :<

#
akerro

@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ę ;)

#