def minimumSize(self): size = QtCore.QSize() for item in self.itemList: size = size.expandedTo(item.minimumSize()) size += QtCore.QSize(2 * self.margin(), 2 * self.margin()) return size
def build(self, n=3, columns=3, year=None, month=None): self.calendars = [] if year is None: year = datetime.date.today().year if month is None: month = datetime.date.today().month layout = QtWidgets.QGridLayout() while self.layout().count(): self.layout().removeItem(self.layout().itemAt(0)) self.layout().addLayout(layout) size = self.minimumSizeHint() x, y = size.width(), size.height() x *= min(n, columns) y *= 1 + ((n - 1) // columns) self.setMinimumSize(QtCore.QSize(x, y)) for i in range(n): calendar = QtWidgets.QCalendarWidget() calendar.i = i calendar.setCurrentPage(year, month) month += 1 if month == 13: year += 1 month = 1 calendar.currentPageChanged.connect( lambda year, month, cal=calendar: self.currentPageChanged( year, month, cal)) calendar.clicked.connect(self.return_result) calendar.activated.connect(self.return_result) self.calendars.append(calendar) layout.addWidget(calendar, i // columns, i % columns)