2010-04-12 7 views
3

Il y a quelque temps, j'ai travaillé sur Qt pour C++; maintenant je travaille avec PyQt.Utilisation correcte des signaux PyQt

J'ai une sous-classe de QStackedWidget, et à l'intérieur de cette sous-classe de QWidget. Dans le QWidget je veux cliquer sur un bouton qui va à la page suivante du QStackedWidget. Mon approche (simplifiée) est la suivante:

class Stacked(QtGui.QStackedWidget): 
    def __init__(self, parent=None): 
     QtGui.QStackedWidget.__init__(self, parent) 
     self.widget1 = EventsPage() 
     self.widget1.nextPage.connect(self.nextPage) 
     self.widget2 = MyWidget() 
     self.addWidget(self.widget1) 
     self.addWidget(self.widget2) 

    def nextPage(self): 
     self.setCurrentIndex(self.currentIndex() + 1) 


class EventsPage(QtGui.QWidget): 
    nextPage = QtCore.pyqtSignal() 

    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.continueButton = QtGui.QPushButton('Continue') 
     self.continueButton.clicked.connect(self.nextPage) 

Donc, au fond, je me connecte le signal de continueButton clicked au signal EventsPage nextPage, que je puis connecter à empilée à la méthode nextPage. Je pourrais juste plonger dans les internes de EventsPage dans Stacked et se connecter self.widget1.continueButton.clicked, mais cela semblait complètement vaincre le but des signaux et des machines à sous.

Cette approche a-t-elle un sens, ou existe-t-il un meilleur moyen?

Répondre

6

Non, cela est parfaitement logique. Pensez aux signaux que les gens agitent du haut des bâtiments. Ils ne veulent pas traverser la rue (tous ces escaliers ...), alors ils regardent ce que font les autres sur les autres bâtiments. De cette façon, personne ne doit se soucier de ce qui se passe à l'intérieur des bâtiments.

+0

+1 Belle analogie :) – Skilldrick

Questions connexes