首页 > 其他分享 >12. 日历控件

12. 日历控件

时间:2024-12-31 20:41:29浏览次数:1  
标签:calendarWidget 控件 None 12 int 日历 日期 QCalendarWidget

一、日历类

  日历类 QCalendar 主要用于确定纪年法,当前通用的是公历纪年法,这也是默认值。QCalendar 类在 PySide6.QtCore 模块中。

  我们可以在终端中使用 pip 安装 pyside6 模块。

pip install pyside6

  用 QCalendar 类创建日历实例的方法如下:

QCalendar()
QCalendar(name:str)
QCalendar(system:QCalendar.System)

  其中,name 可以取值如下:

'Julian'
'Jalali'
'Islamic Civil'
'Milankovic'
'Gregorian'
'islamicc'
'Islamic'
'gregory'
'Persian'
'islamic-civil'

  system 是 QCalendar.System 的枚举值,可取值如下:

QCalendar.System.Gregorian        # 默认值
QCalendar.System.Julian
QCalendar.System.Milankovic
QCalendar.System.Jalali
QCalendar.System.IslamicCivil

  日历类的常用方法如下:

# 实例方法
name() -> str                                                       # 获取当前使用的日历纪年法
dateFromParts(year:int, month:int, day:int) -> datetime             # 根据年月日创建日期
dayOfWeek(date:QDate) -> int                                        # 获取指定日期在一周的第几天
daysInMonth(month:int, year:int=QCalendar.Unspecified) -> int       # 获取指定年指定月份的总天数
daysInYear(year:int) -> int                                         # 获取指定年份的总天数
isDateValid(year:int, month:int, day:int) -> bool                   # 检查指定年月日是否有效
isGregorian() -> bool                                               # 检查是否是公历
isLeapYear(year) -> bool                                            # 检查是否是闰年
isLunar() -> bool                                                   # 检查是否是农历
isSolar() -> bool                                                   # 检查是否是阳历
minimumDaysInMonth() -> int                                         # 获取月中最小天数
maximumDaysInMonth() -> int                                         # 获取月中最大天数
maximumMonthsInYear() -> int                                        # 获取年中最大月数

# 静态方法
availableCalendars() -> List[str]                                   # 获取可用的日历纪年法

二、日历控件

  日历控件 QCalendarWidget 主要用于显示日期、星期和周数。可以设置日历控件显示的最小日期和最大日期,还可以设置日历表头的样式。

  用 QCalendarWidget 类创建实例对象的方法如下:

QCalendarWidget(parent:QWidget=None)

  其中 parent窗口 或者 容器类控件

  CalendarWidget 控件常用的方法及其说明如下:

# 实例方法
selectedDate() -> QDate                                                                 # 获取选中的日期

setCalendar(calendar:QCalendar) -> None                                                 # 设置日历
calendar() -> QCalendar                                                                 # 获取日历

setDateTextFormat(date:QDate, format:QTextFormat) -> None                               # 设置日期的显示格式
dateTextFormat() -> QTextFormat                                                         # 获取日期的显示格式

setFirstDayOfWeek(dayOfWeek:Qt.DayOfWeek) -> None                                       # 设置一周的第一天显示的是哪一天
firstDayOfWeek() -> Qt.DayOfWeek                                                        # 获取一周的第一天显示的是哪一天

isGridVisible() -> bool                                                                 # 是否显示日历网格
isNavigationBarVisible() -> bool                                                        # 是否显示导航栏

setHorizontalHeaderFormat(format:QCalendarWidget.HorizontalHeaderFormat)  -> None       # 设置水平表头的格式
setVerticalHeaderFormat(format:QCalendarWidget.VerticalHeaderFormat) -> None            # 设置垂直表头的格式

setMinimumDate(date:QDate) -> None                                                      # 设置日历控件可选的最小日期
minimumDate() -> QDate                                                                  # 获取日历控件可选的最小日期
setMaximumDate(date:QDate) -> None                                                      # 设置日历控件可选的最大日期
maximumDate() -> QDate                                                                  # 获取日历控件可选的最大日期

setSelectionMode(mode:QCalendarWidget.SelectionMode) -> None                            # 设置选择模式

monthShown() -> int                                                                     # 获取显示的月份
yearShown() -> int                                                                      # 获取显示的年份

# 槽函数
setSelectedDate(date:QDate) -> None                                                     # 设置选中的日期
setCurrentPage(year:int, month:int) -> None                                             # 设置当前显示的年和月
setGridVisible(show:bool) -> None                                                       # 设置日历网格是否可见
setDateRange(min:QDate, max:QDate) -> None                                              # 设置日历控件可选的日期范围
setNavigationBarVisible(visible:bool) -> None                                           # 设置导航栏是否可见
showSelectedDate() -> None                                                              # 显示选中的日期
showPreviousMonth() -> None                                                             # 显示上一个月的日历
showNextMonth() -> None                                                                 # 显示下一个月的日历
showPreviousYear() -> None                                                              # 显示上一年的日历
showNextYear() -> None                                                                  # 显示下一年的日历
showToday() -> None                                                                     # 显示当前日期的日历

  用 setSelectionMode(QCalendarWidget.SelectionMode) 方法可以设置选择日期的模式,其中参数可选值如下:

QCalendarWidget.SelectionMode.NoSelection        # 不允许选择
QCalendarWidget.SelectionMode.SingleSelection    # 单选

  用 setVerticalHeaderFormat(QCalendarWidget.VerticalHeaderFormat) 方法可以设置竖直表头的格式,其中参数QCalendarWidget.VerticalHeaderFormat可以取值如下:

QCalendarWidget.VerticalHeaderFormat.ISOWeekNumbers        # 标准格式的周数
QCalendarWidget.VerticalHeaderFormat.NoVerticalHeader      # 隐藏周数

  用 setHorizontalHeaderFormat(QCalendarWidget.HorizontalHeaderFormat) 方法可以设置水平表头的格式,其中参数QCalendarWidget.HorizontalHeaderFormat可以取值如下:

QCalendarWidget.HorizontalHeaderFormat.SingleLetterDayNames    # 用单个字母代替全拼,如M代表Monday
QCalendarWidget.HorizontalHeaderFormat.ShortDayNames           # 用缩写代替全拼,如Mon代表Monday
QCalendarWidget.HorizontalHeaderFormat.LongDayNames            # 全名
QCalendarWidget.HorizontalHeaderFormat.NoHorizontalHeader      # 隐藏表头

  用 setFirstDayOfWeek(Qt.DayOfWeek) 方法可以设置一周中哪天排在最前面,其中参数 Qt.DayOfWeek 可以取Qt.Monday ~ Qt.Sunday。

  CalendarWidget 控件常用的信号及其说明如下:

activated(date:QDate)                       # 日期激活(双击)时发射信号
clicked(date:QDate)                         # 日期被点击时发送信号
currentPageChanged(year:int, month:int)     # 月视图被切换时发射信号
selectionChanged()                          # 选择日期发生改变发射信号
import sys

from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QCalendarWidget
from PySide6.QtCore import QDate
from PySide6.QtGui import Qt

class MyWidget(QWidget):
    def __init__(self):
        # 1.调用父类Qwidget类的__init__()方法
        super().__init__()
        # 2.调用setupUi()方法初始化页面
        self.setup_ui()

    def setup_ui(self):
        # 1.设置窗口对象大小
        self.resize(700, 500)

        # 2.创建日历控件
        calendarWidget = QCalendarWidget(self)
        calendarWidget.resize(400, 400)

        # 3.设置最小日期
        calendarWidget.setMinimumDate(QDate(2000, 1, 1))

        # 4.设置最大日期
        calendarWidget.setMaximumDate(QDate(2999, 12, 31))

        # 5.设置一周的第一天
        calendarWidget.setFirstDayOfWeek(Qt.DayOfWeek.Sunday)

        # 6.设置是否显示网格
        calendarWidget.setGridVisible(True)

        # 7.设置选择模式
        calendarWidget.setSelectionMode(QCalendarWidget.SelectionMode.SingleSelection)

        # 8.设置水平头部模式
        calendarWidget.setHorizontalHeaderFormat(QCalendarWidget.HorizontalHeaderFormat.LongDayNames)

        # 9.设置对齐方式
        calendarWidget.setVerticalHeaderFormat(QCalendarWidget.VerticalHeaderFormat.NoVerticalHeader)

        # 10.设置是否显示导航栏
        calendarWidget.setNavigationBarVisible(True)

        # 11.设置是否可以编辑日期
        calendarWidget.setDateEditEnabled(True)

        # 12.设置编辑日期的最大间隔
        calendarWidget.setDateEditAcceptDelay(30)

        # 13.获取选中的日期
        print(calendarWidget.selectedDate())

        # 14.定义信号与槽的连接
        calendarWidget.clicked.connect(self.clicked)
        calendarWidget.activated.connect(self.activated)
        calendarWidget.selectionChanged.connect(self.selectionChanged)
        calendarWidget.currentPageChanged.connect(self.currentPageChanged)

    def clicked(self, date):
        print("你选中的日期为:", date)

    def activated(self, date):
        print("你激活的日期为:", date)

    def selectionChanged(self):
        print("选中的日期发生改变了,")

    def currentPageChanged(self, year, money):
        print(f"你选中的日期在为【{year}】-【{money}】月")

if __name__ == "__main__":
    # 1.创建一个QApplication类的实例
    app = QApplication(sys.argv)
    # 2.创建一个窗口
    window = MyWidget()
    # 3.展示窗口
    window.show()
    # 4.进入程序的主循环并通过exit()函数确保主循环安全结束
    sys.exit(app.exec())

标签:calendarWidget,控件,None,12,int,日历,日期,QCalendarWidget
From: https://www.cnblogs.com/FlurryHeart/p/18644755

相关文章

  • 11.12
    12月27日,OpenAI确认,美东时间12月26日周四上午11点整,旗下服务开始发生大规模宕机。其公布的状态页面显示,OpenAI在11点整公布启动调查,称ChatGPT、Sora和API都出现高错误率,11点18分确认,问题出自“上游供应商”,在监控情况。此后,OpenAI分别在12点06分和13点......
  • 袁町招教---从12月开始备考语文教师编攻略计划(自学版)
    语文学科一直都是教师编考试里数一数二的卷,想要上岸还真是不容易。去年我能以高分上岸我们市区语文教师编也是努力了很久的,下面给大家分享我的备考经验,希望能帮到你们顺利一战上岸!!-......
  • 静力学FEM12.31
    1.静力学方程考虑图所示变截面弹性杆的静态响应。这是线性应力分析或线弹性问题的一个例子,我们需要求杆内的应力分布σ(x)。应力由物体的变形产生,而变形由物体内各点的位移u(x)表征。位移导致用ε(x)表示的应变;应变是一个无量纲变量。杆受到分布力b(x)或集中力作用。这个力可能......
  • [241231]阿普米司特抗银屑病的同时辅助抗真菌感染
    已知真菌定植/感染可能参与触发或加重斑块状银屑病.抗IL-17和TNFi可能增加真菌感染风险.一项探索性研究通过70例难治部位(头皮,指甲,间擦部/外生殖器)银屑病患者接受阿普米司特治疗前以及治疗1年过程中(允许局部真菌感染入组并继续抗真菌治疗),监测真菌定植/局部真菌感染以及......
  • 12.16
    虽然已经对Vue.js有了一定的了解,但Vue的生态系统非常庞大,还有很多知识值得深入学习。例如,学习Vue的服务端渲染(SSR)技术,以提高应用的首屏加载速度和搜索引擎优化(SEO);探索Vue的测试框架(如VueTestUtils),编写单元测试和集成测试,保证代码的质量和稳定性;研究Vue的动画和过渡效......
  • 12.14
    Vue.js的学习让我对前端开发的编程思维有了很大的提升。通过响应式数据绑定和声明式的模板语法,我能够更加直观地将数据与页面元素进行关联,而不需要像传统的JavaScript开发那样频繁地操作DOM元素,大大提高了开发效率和代码的可读性。同时,组件化开发思想让我学会了如何将复杂的......
  • 12.6
    深入学习了Vue的模板语法,包括文本插值(Mustache语法)、指令(如 v-bind、v-on、v-if、v-for 等)的使用方法,通过这些指令能够方便地实现数据的动态渲染、事件绑定、条件渲染和列表渲染等功能,使页面的交互性大大增强。练习了使用 v-bind 指令动态绑定HTML属性,如 class 和 st......
  • 12.5
    了解了Vue.js的基本概念和特点,包括响应式数据绑定、组件化开发等核心思想,认识到Vue是一种构建用户界面的渐进式框架,能够轻松地与现有项目进行集成,提高开发效率。搭建了Vue的开发环境,通过使用VueCLI快速创建了一个Vue项目,熟悉了项目的基本结构和文件组织方式,包括组件的......
  • 【论文阅读笔记】IceNet算法与代码 | 低照度图像增强 | IEEE | 2021.12.25
    目录1导言2相关工作A传统方法B基于CNN的方法C交互方式3算法A交互对比度增强1)Gammaestimation2)颜色恢复3)个性化初始ηB损失函数1)交互式亮度控制损失2)熵损失3)平滑损失4)总损失C 实现细节4实验5IceNet环境配置和运行1下载代码2运行3训......
  • CISSP备考经验分享2024年12月
    https://www.cnblogs.com/iAmSoScArEd/p/18644021我超怕的CISSP备考经验分享2024年12月考试过了,以下是我的备考经历,不一定适合所有人,所以请按照自己的习惯备考。考试感受考试形式:CAT模式、中文(感兴趣可以先了解下考试模式:https://www.isc2china.org/cissp-cat-faq/)考试用时:1......