2010-04-12 2 views
3

Некоторое время назад я сделал некоторую работу в Qt для C++; теперь я работаю с PyQt.Правильное использование сигналов PyQt

У меня есть подкласс QStackedWidget и внутри этого подкласса QWidget. В QWidget я хочу нажать кнопку, которая переходит на следующую страницу QStackedWidget. Мой (упрощенный) подход заключается в следующем:

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) 

Так, в принципе, я подключить сигнал continueButton clicked к сигналу EventsPage nextPage, который я тогда соединительном в ячейке с методом nextPage. Я мог просто вникать во внутренние объекты EventsPage в Stacked и подключать self.widget1.continueButton.clicked, но это, казалось, полностью разрушило цель сигналов и слотов.

Так ли этот подход имеет смысл или есть лучший способ?

ответ

6

Нет, это имеет смысл. Подумайте о сигналах, когда люди машут сверху. Они не хотят пересекать улицу (все эти лестницы ...), поэтому они смотрят, что делают другие люди в других зданиях. Таким образом, никто не должен заботиться о том, что происходит внутри зданий.

+0

+1 Хорошая аналогия :) – Skilldrick