def testQDate(self): date = datetime.date(2010, 4, 23) other = QDate(date) self.assertEqual(date.year, other.year()) self.assertEqual(date.month, other.month()) self.assertEqual(date.day, other.day()) self.assertEqual(date, other.toPython())
def updateCalendar(self, select_date: QDate) -> None: if self.__selectDate == select_date: return row: int = 0 dateItem: List[List[ShadowCalendar.DateItem], ] = \ [[ShadowCalendar.DateItem() for column in range(7)] for row in range(6)] date: QDate = QDate(select_date.year(), select_date.month(), 1) while date.month() == select_date.month(): weekDay: int = date.dayOfWeek() dateItem[row][weekDay - 1].year = date.year() dateItem[row][weekDay - 1].month = date.month() dateItem[row][weekDay - 1].day = date.day() date = date.addDays(1) if weekDay is 7 and date.month() is date.month(): row += 1 # 重新赋值 for i in range(6): for j in range(7): self.__dateItem[i][j] = dateItem[i][j] self.__selectDate = select_date self.update()
def paintCell( self, painter: QtGui.QPainter, rect: QtCore.QRect, date: QtCore.QDate ): # Paint background if self.selectedDate() == date: painter.fillRect(rect, self.Color.selected_background) # Paint date text if self.selectedDate() != date: if self.monthShown() != date.month(): painter.setPen(self.Color.unselected_month_date_text) elif qdate_is_weekend(date): painter.setPen(self.Color.unselected_weekend_date_text) else: painter.setPen(self.Color.unselected_date_text) else: painter.setPen(self.Color.selected_date_text) painter.setFont(QtGui.QFont("Helvetica", 20)) painter.drawText(rect, QtCore.Qt.AlignTop, str(date.day())) # Get todo items to paint items = [] try: items = self.todo_item_dict[date.year()][date.month()][date.day()] except KeyError: pass if len(items) != 0: # Paint number of todo items # Text color is same is date's completed_items_num = len([item for item in items if item["completed"]]) x = 40 y = 5 width = rect.width() - x painter.setFont(QtGui.QFont("Helvetica", 14)) item_number_str = f"{completed_items_num}/{len(items)} items" painter.drawText( rect.x() + x, rect.y() + y, width, rect.height(), 0, item_number_str ) # Paint todo items x = 5 y = 32 width = rect.width() - x painter.setFont(QtGui.QFont("Helvetica", 10)) for item in items: if y > rect.height(): break if item["completed"]: painter.setPen(self.Color.completed_todo_item) else: painter.setPen(self.Color.uncompleted_todo_item) height = rect.height() - y bounding_rect = painter.boundingRect( rect.x() + x, rect.y() + y, width, height, QtCore.Qt.TextWordWrap, item["name"], ) painter.drawText( rect.x() + x, rect.y() + y, width, height, QtCore.Qt.TextWordWrap, item["name"], ) y += bounding_rect.height()
def paintCell( self, painter: QtGui.QPainter, rect: QtCore.QRect, qdate: QtCore.QDate ): date = qdate_to_date(qdate) # Paint date text if self.monthShown() != qdate.month(): painter.setPen(self.Color.unselected_month_date_text) else: painter.setPen(self.Color.unselected_date_text) painter.setFont(QtGui.QFont("Helvetica", 20)) painter.drawText(rect, QtCore.Qt.AlignTop, str(qdate.day())) # Get all of the chains for the current week for date_range, chains in self.month_chains.items(): if date_range[0] <= date and date <= date_range[1]: display_chains = chains break else: display_chains = self.generate_week_info(qdate_to_date(qdate)) # Paint completed chains completed_chains_num = 0 x = 5 y = 32 width = rect.width() - x painter.setFont(QtGui.QFont("Helvetica", 10)) for chain in display_chains: if y > rect.height(): break height = rect.height() - y bounding_rect = painter.boundingRect( rect.x() + x, rect.y() + y, width, height, QtCore.Qt.TextWordWrap, chain, ) if chain_handler.get_chain(chain, qdate.year(), qdate.month(), qdate.day()): # Draw colored rect painter.fillRect( rect.x(), rect.y() + y, rect.width(), min(bounding_rect.height(), rect.height() - y), self.chain_color_dict[chain], ) # Draw text painter.setPen(self.Color.chain_name_color) completed_chains_num += 1 painter.drawText( rect.x() + x, rect.y() + y, width, height, QtCore.Qt.TextWordWrap, chain, ) y += bounding_rect.height() # Paint number of completed todo items if completed_chains_num > 0: if self.monthShown() != qdate.month(): painter.setPen(self.Color.unselected_month_date_text) else: painter.setPen(self.Color.unselected_date_text) x = 40 y = 5 width = rect.width() - x painter.setFont(QtGui.QFont("Helvetica", 14)) item_number_str = f"{completed_chains_num}" painter.drawText( rect.x() + x, rect.y() + y, width, rect.height(), 0, item_number_str ) # Surround current date in a blue border if datetime.date.today() == date: painter.setPen(self.Color.selected_background) painter.drawRect(rect.x(), rect.y(), rect.width(), rect.height())
def qDate2date(qDate: QDate) -> datetime.date: return datetime.date(qDate.year(), qDate.month(), qDate.day())
def qdate_to_date(qdate: QtCore.QDate) -> datetime.date: return datetime.date(qdate.year(), qdate.month(), qdate.day())