2014-02-11 4 views
0

У меня есть метод getCurrentDate; этот метод должен вернуть текущий отображаемый месяц.PyQt QCalendarWidget - метод не возвращает значение

# coding: utf-8 
import sys 
from PyQt4 import QtCore, QtGui 


class Window(QtGui.QCalendarWidget): 

    def __init__(self): 

     QtGui.QCalendarWidget.__init__(self) 

     self.resize(300, 300) 
     self.connect(self, QtCore.SIGNAL('currentPageChanged()'), self.getCurrentDate) 

     print self.getCurrentDate() 

    def getCurrentDate(self): 
     return self.monthShown() 


if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    gui = Window() 
    gui.show() 
    sys.exit(app.exec_()) 

Когда я называть getCurrentDate, она возвращает текущее значение (например, 2), но когда я изменить отображение на следующий месяц, метод ничего не возвращает. Зачем?

+2

Просто примечание: вам следует рассмотреть возможность использования [поддержки нового типа сигнала/слота] (http://pyqt.sourceforge.net/Docs/PyQt 4/new_style_signals_slots.html), если вы используете PyQt 4.5 или выше. – Claus

+1

Да - если бы вы использовали синтаксис нового стиля и неправильно установили соединение, он бы поднял TypeError. Самое плохое в синтаксисе старого стиля заключается в том, что он терпит неудачу (и очень легко получить подпись SIGNAL неправильно). – ekhumoro

ответ

1

Вы должны изменить это:

self.connect(self, QtCore.SIGNAL('currentPageChanged()'), self.getCurrentDate) 

To:

self.connect(self, QtCore.SIGNAL('currentPageChanged(int,int)'), self.getCurrentDate) 

Это будет возвращать правильное значение, и если вы хотите напечатать значение, то вам необходимо поместить оператор печати в вашей функции :

def getCurrentDate(self): 
    print self.monthShown() 
    return self.monthShown() 
+0

Это нормально, но я передал месяц значений от getCurrentDate к другому методу, например. printCurrentDate, я получаю значение только текущего месяца. –

Смежные вопросы