Odnajdywanie źródła eventu....

Witam, mam następujący problem/pytanie. Mam klasę głównego okna która zawiera listę buttonów, które w istocie są przeciążonymi QtGui.QPushButton. Co chciałbym osiągnąć jest po kliknięciu dowolnego z buttonów chciałbym wywołać jedną metodę okna głównego, gdzie mogę odczytać wartość jednego z atrybutów buttona. Nie bardzo wiem jak mam to napisać. Np. mogę wywołać dowolna metodę z klasy okna -

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.myAction)

gdzie myAction to metoda okna... ale już np. kod

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.myActionWithAttr(2))

nie chce się wykonać...

  • Nie odpowiem Ci na postawiony problem, ale powiem Ci dlaczego drugi sposób Ci nie działa.

    self.myAction
    

    to referencja do przywiązanej metody (ang. bound method), czyli funkcji z przypisanym do siebie pierwszym atrybutem o wartości self - to tak w dużym uproszczeniu.

    self.myActionWithAttr(2)
    

    to wywołanie metody z argumentem (funkcji, której pierwszym argumentem jest self, a drugim 2). Ta funkcja zwraca wynik lub None, jeśli nic nie zwraca.

    Teraz:

    1. QtCore.QObject.connect(...) przyjmuje w pierwszym wypadku w ostatnim argumencie referencję do metody;
    2. QtCore.QObject.connect(...) przyjmuje w drugim wypadku w ostatnim argumencie wynik wykonania metody;

    Nie wiem, czy Qt pozwala przekazywać wartości użytkownika do metod wywoływanych w sygnałach, w zdarzeniach GTK+ są takie możliwości. Trzeba uważnie przewertować podręcznik do Qt... nie wierzę, że wywołanie zdarzenia nie przekazuje w którymś argumencie obiektu na którym to zdarzenie zaszło, bo to by było bardzo nie-GUI podejście.

Zaloguj się, aby dodać swoją odpowiedź