064.PyQt5_QCalendarWidget_日历控件

QCalendarWidget 日历控件

  • QDateTimeEdit日期时间步长调节器

  • 描述

    • 提供了一个基于每月日历控件,允许用户选择一个日期
    • 图示
    • 064.PyQt5_QCalendarWidget_日历控件_第1张图片

  • 继承自:QWidget

  • 功能作用

    • 构造函数
      QCalendarWidget(parent: QWidget = None)
      
    • 日期范围
      setMinimumDate(QDate date)                  # 通过QDate对象设置最小日期
      minimumDate() -> QDate                      # 获取最小日期,返回QDate对象
      
      setMaximumDate(QDate date)                  # 通过QDate对象设置最大日期
      maximumDate() -> QDate                      # 获取最大日期,返回QDate对象
      
      setDateRange(QDate min, QDate max)          # 通过QDate对象设置日期范围
      
    • 日期编辑
      • 当控件获取焦点时, 直接输入数字, 可以快速修改日期
      setDateEditEnabled(bool enable)             # 设置日历控件是否可以通过键盘编辑
      isDateEditEnabled() -> bool                 # 判断日历控件是否可以被编辑
      
      setDateEditAcceptDelay(int delay)           # 设置通过键盘编辑后控件的响应时间(毫秒)
      dateEditAcceptDelay() -> int                # 获取通过键盘编辑后控件的响应时间(毫秒)
      
    • 日期获取
      • 显示日期 并不等于 选中日期
      monthShown() -> int                         # 获取当前显示的月,返回int类型数据
      yearShown() -> int                          # 获取当前显示的年,返回int类型数据
      selectedDate() -> QDate                     # 获取被选中的日期,返回QDate对象
      
    • 格式外观
      • 导航条
        setNavigationBarVisible(bool)           # 设置是否显示顶部导航条(顶部操作年、月的工具栏)
        isNavigationBarVisible() -> bool        # 判断是否显示顶部导航条
        
      • 一周的第一天
        setFirstDayOfWeek(Qt.DayOfWeek dayOfWeek)       # 设置控件每周的第一天为星期几
        firstDayOfWeek() -> Qt.DayOfWeek                # 获取控件每周的第一天是星期几
        
        # 参数:Qt.DayOfWeek
        #       Qt.Sunday                               # 星期日
        #       Qt.Monday                               # 星期一
        #       Qt.Tuesday                              # 星期二
        #       Qt.Wednesday                            # 星期三
        #       Qt.Thursday                             # 星期四
        #       Qt.Friday                               # 星期五
        #       Qt.Saturday                             # 星期六
        
      • 网格显示
        setGridVisible(bool)                            # 设置控件是否显示网格
        isGridVisible() -> bool                         # 判断控件是否显示网格
        
      • 文本格式
        setHeaderTextFormat(QTextCharFormat format)     # 通过QTextCharFormat对象设置水平头和垂直头字体格式
        headerTextFormat() -> QTextCharFormat           # 获取水平头和垂直头字体格式,返回QTextCharFormat对象
        
        setHorizontalHeaderFormat(QCalendarWidget.HorizontalHeaderFormat format)         # 设置水平头显示格式
        horizontalHeaderFormat() -> QCalendarWidget.HorizontalHeaderFormat               # 获取水平头显示格式
        # 参数:QCalendarWidget.HorizontalHeaderFormat
        # 		QCalendarWidget.SingleLetterDayNames                # 英文:M/中文:周
        # 		QCalendarWidget.ShortDayNames                       # 英文:Mon/中文:周一
        # 		QCalendarWidget.LongDayNames                        # 英文:Monday/中文:星期一
        # 		QCalendarWidget.NoHorizontalHeader                  # 水平头部显示
        
        setVerticalHeaderFormat(QCalendarWidget.VerticalHeaderFormat format)             # 设置垂直头显示格式
        verticalHeaderFormat() -> QCalendarWidget.VerticalHeaderFormat                   # 获取垂直头显示格式
        # 参数:QCalendarWidget.VerticalHeaderFormat
        # 		QCalendarWidget.ISOWeekNumbers                          # 标题显示ISO周数(一年的第几周),如QDate.weekNumber()所述。
        # 		QCalendarWidget.NoVerticalHeader                        # 垂直头部显示
           
        setWeekdayTextFormat(self, Qt.DayOfWeek, QTextCharFormat)       # 设置每周的某一天(星期几)字体显示格式
        weekdayTextFormat(Qt.DayOfWeek dayOfWeek) -> QTextCharFormat    # 获取每周的某一天(星期几)字体显示格式
        
        setDateTextFormat(QDate date, QTextCharFormat format)           # 设置指定某一天的字体显示格式
        dateTextFormat(self, Union[QDate, datetime.date]) -> QTextCharFormat    # 获取指定某一天的字体显示格式
        dateTextFormat(self) -> object
        
    • 日期选中
      setSelectedDate(QDate date)                                         # 设置选中指定日期
      
      setSelectionMode(QCalendarWidget.SelectionMode mode)                # # 设置控件日期能否被选中(不能限制代码设置)
      selectionMode() -> QCalendarWidget.SelectionMode                    # 获取选中模式
      # 参数:QCalendarWidget.SelectionMode
      #         QCalendarWidget.NoSelection                               # 日期无法被选中
      #         QCalendarWidget.SingleSelection                           # 日期可以被选中(单个日期)
      
    • 常用的方法
      showToday()                                                         # 展示当前这一天(今天),不会选中该日期
      showSelectedDate()                                                  # 展示选中的日期
      
      showNextYear()                                                      # 展示下一年份
      showPreviousYear()                                                  # 展示上一年份
      
      showNextMonth()                                                     # 展示下一月份
      showPreviousMonth()                                                 # 展示上一月份
      
      setCurrentPage(int year, int month)                                 # 通过年和月设置展示页
      
  • 可用信号

    activated(QDate date)                       # 只要用户按下Return或Enter键或双击日历小部件中的日期,就会发出此信号。
    clicked(QDate date)                         # 鼠标单击有效日期时才会发出信号(无法选中日期为无效日期,不会发射该信号)
    currentPageChanged(int year, int month)     # 当前展示页发生改变时会发出此信号。新的一年和一个月作为参数传递。
    selectionChanged()                          # 当前选择的日期发生改变时会发出此信号(鼠标/代码)
    

  • 代码示例
  • 示例1:QCalendarWidget-功能作用
    from PyQt5.Qt import *
    import sys
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QCalendarWidget-功能作用')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            cdw = QCalendarWidget(self)
            cdw.resize(300, 250)
    
            pass    # 设置日期范围
            # cdw.setMinimumDate(QDate(2000,1,1))                       # 设置最小日期
            # cdw.setMaximumDate(QDate(2099,12,31))                     # 设置最大日期
            # cdw.setDateRange(QDate(2020,1,1),QDate(2023,12,31))       # 设置一个日期范围
    
            pass    # 日期编辑
            # cdw.setDateEditEnabled(False)                             # 设置日历控件不能被编辑(键盘操作)
            # cdw.setDateEditAcceptDelay(1000)                           # 设置通过键盘编辑后控件的响应时间(毫秒)
    
            pass    # 日期获取
            # 显示日期 并不等于 选中日期
            print(cdw.monthShown())         # 获取当前显示月,返回Int类型数据
            print(cdw.yearShown())          # 获取当前显示年,返回Int类型数据
            print(cdw.selectedDate())       # 获取选中的日期,返回QDate对象
    
            pass    # 外观设置
            # cdw.setNavigationBarVisible(False)      # 设置是否显示头部导航栏(年、月操作工具栏)
            cdw.setFirstDayOfWeek(Qt.Sunday)        # 设置控件的第一天是星期几
            cdw.setGridVisible(True)                # 设置是否显示网格
    
            tcf = QTextCharFormat()
            tcf.setFontFamily('汉仪超级战甲W')
            tcf.setFontPointSize(14)
            # cdw.setHeaderTextFormat(tcf)                                            # 通过QTextCharFormat对象设置水平头和垂直头字体格式
            # cdw.setHorizontalHeaderFormat(QCalendarWidget.LongDayNames)             # 设置水平头显示格式
            # cdw.setVerticalHeaderFormat(QCalendarWidget.ISOWeekNumbers)             # 设置垂直头显示格式
    
            # cdw.setWeekdayTextFormat(Qt.Wednesday, tcf)                             # 设置每周的某一天(星期几)字体显示格式
            # cdw.setDateTextFormat(QDate(2023,4,1), tcf)                             # 设置指定某一天的字体显示格式
    
            # 结合自定某天设置字体格式和显示页发生改变时发射信号,可以做出日程提示
            # cdw.setDateTextFormat(QDate(cdw.yearShown(), cdw.monthShown(), 22), tcf)
            # def select_m(year, month):
            #     cdw.setDateTextFormat(QDate(year,month, 22), tcf)
            #
            # cdw.currentPageChanged.connect(select_m)
    
            pass    # 日期选中设置
            # cdw.setSelectedDate(QDate(2023,4,6))                        # 设置选中某一天
            # cdw.setSelectionMode(QCalendarWidget.NoSelection)           # 设置控件日期能否被选中(不能限制代码设置)
    
            pass    # 常用功能,显示页设置
            def to_page_today():
                cdw.showToday()
                cdw.setFocus()
    
            def to_page_nextyear():
                cdw.showNextYear()
                cdw.setFocus()
    
            def to_page_previousyear():
                cdw.showPreviousYear()
                cdw.setFocus()
    
            def to_page_nextmonth():
                cdw.showNextMonth()
                cdw.setFocus()
    
            def to_page_previousmonth():
                cdw.showPreviousMonth()
                cdw.setFocus()
    
            def to_page_currentpage():
                cdw.setCurrentPage(2025,1)
                cdw.setFocus()
    
            btn1 = QPushButton('今天', self)
            btn1.move(cdw.width() + 10, 20)
    
            btn2 = QPushButton('下一年', self)
            btn2.move(btn1.x(),btn1.y()+30)
    
            btn3 = QPushButton('上一年', self)
            btn3.move(btn1.x(), btn2.y() + 30)
    
            btn4 = QPushButton('下一月', self)
            btn4.move(btn1.x(),btn3.y()+30)
    
            btn5 = QPushButton('上一月', self)
            btn5.move(btn1.x(), btn4.y() + 30)
    
            btn6 = QPushButton('跳转到...', self)
            btn6.move(btn1.x(), btn5.y() + 30)
    
            btn1.clicked.connect(to_page_today)
            btn2.clicked.connect(to_page_nextyear)
            btn3.clicked.connect(to_page_previousyear)
            btn4.clicked.connect(to_page_nextmonth)
            btn5.clicked.connect(to_page_previousmonth)
            btn6.clicked.connect(to_page_currentpage)
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
  • 示例2:QCalendarWidget-可用信号
    from PyQt5.Qt import *
    import sys
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QCalendarWidget-可用信号')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            cdw = QCalendarWidget(self)
            # activated(QDate date)                     # 只要用户按下Return或Enter键或双击日历小部件中的日期,就会发出此信号。
            # clicked(QDate date)                       # 鼠标单击有效日期时才会发出信号(无法选中日期为无效日期,不会发射该信号)
            # currentPageChanged(int year, int month)   # 当前展示页发生改变时会发出此信号。新的一年和一个月作为参数传递。
            # selectionChanged()                        # 当前选择的日期发生改变时会发出此信号(鼠标/代码)
    
            # cdw.setSelectionMode(QCalendarWidget.NoSelection)
    
            cdw.activated.connect(lambda date:print('选中了日期:',date))
            cdw.clicked.connect(lambda date: print('点击了:', date))
            cdw.currentPageChanged.connect(lambda year,month: print(f'当前显示是{year}年{month}月'))
            cdw.selectionChanged.connect(lambda :print('当前选择的日期发生了改变'))
            cdw.setSelectedDate(QDate(2023,4,1))
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())

     

你可能感兴趣的:(PyQt5,pyqt5,python,gui,python,pyqt,qt)