PySide6 QDateTimeEdit 实战:6 步做出专业日期输入框
【免费下载链接】PySide6-Code-Tutorial可能是最好的PySide6中文教程!用代码实例讲解PySide6,附优质Demos、图标库、QSS皮肤、相关文章等分享!项目地址: https://gitcode.com/GitHub_Trending/py/PySide6-Code-Tutorial
做报名表单时,你常常需要用户填出生日期;做排班系统,又得让员工挑一个工作日和开始时间。日期时间控件 QDateTimeEdit 用几行配置就能接住这类需求。PySide6-Code-Tutorial 项目为它专门设了独立章节,配套可直接运行的示例代码,本文带你从"跑起来"讲到"接进业务",共 6 步。
最小可运行代码:先拿到一个能用的日期输入框
先别管配置,把它放到窗口里跑起来。QDateTimeEdit 不传参也能创建,但注意,空构造出来的是个"空壳":内部日期值无效,控件会显示一串短横线占位。稳妥做法是创建后立刻赋一个有效值:
from PySide6 import QtCore, QtWidgets # 空构造:控件能用,但内部日期值无效,显示占位横线 self.dte = QtWidgets.QDateTimeEdit(self) # 补上有效初始值,这里取当前日期时间 self.dte.setDateTime(QtCore.QDateTime.currentDateTime()) self.dte.move(200, 200) # 顺手指定位置补一句:除了"空构造 + 赋值",构造函数也直接接受 QDate、QTime、QDateTime,初始值想设成今天,传一行QtCore.QDate.currentDate()就行。完整窗口版看创建示例源码。
本文所有示例都来自这个项目仓库,全是这种能直接跑、直接见效果的小脚本。
核心配置四件套:范围、格式、步长、日历弹窗
第 2 到第 5 步全在这一节。真实项目里这四项几乎是必配项,挨个过。
① 如何限制可选日期范围:日期范围限制
用户不该能选到一百年前或一百年后。日期时间模式下用 setMinimumDateTime、setMaximumDateTime 卡上下限;只显示日期时,setDateRange 直接吃两个 QDate;只显示时间则用 setTimeRange 传两个 QTime。超出范围的手输文本,控件会自动纠正到范围内最近的合法值,不用你自己拦截:
# 示例:只允许选 2024-03 到 2026-12 之间的日期时间 self.dte.setMinimumDateTime(QtCore.QDateTime(2024, 3, 1, 0, 0, 0)) self.dte.setMaximumDateTime(QtCore.QDateTime(2026, 12, 31, 23, 59, 59)) # 纯日期场景,两个 QDate 就够了 self.dte.setDateRange(QtCore.QDate(2024, 3, 1), QtCore.QDate(2026, 12, 31))② 显示格式怎么写:setDisplayFormat 一次讲清
默认显示跟随系统区域设置。想自定义风格,调 setDisplayFormat 即可。格式串和 QLocale 的记法一致:yyyy 是四位年、MM 是月、dd 是日、HH 是 24 小时制、mm 是分、ss 是秒;"年""时"这类中文直接写就行,不会被当记号解析。只想显示时间的话,写 "HH:mm:ss" 这一句即可。
# 换两种风格:先日期后年的欧洲写法、纯中文写法 self.dte.setDisplayFormat("dd/MM/yyyy") # 15/03/2024 self.dte.setDisplayFormat("yyyy年MM月dd日") # 2024年3月15日③ 增减步长怎么定:箭头点一下变多少
上下箭头的默认步长是 1。纯日期控件里步长 1 代表 1 天;想让员工按周挑班,设成 7 更顺。业务要求"每次调 15 分钟"时,步长按格式串里显示的时间精度生效。另外有个自适应模式,步长会跟着光标所在字段自动缩放,精度混用的场景值得开:
self.dte.setSingleStep(7) # 按周跳 # 步长随光标位置自适应,适合"年/月/日都要频繁调"的界面 self.dte.setStepType(QtWidgets.QAbstractSpinBox.AdaptiveDecimalStepType)④ 一键开启 Qt 日历弹窗
一行代码,控件旁边多一个下拉按钮,点开就是可视化日历。挑日期这事,点日历永远比敲键盘、点箭头高效:
# 下拉按钮 + 日历面板,日期选择体验直接拉满 self.dte.setCalendarPopup(True)这里先埋个雷
【免费下载链接】PySide6-Code-Tutorial可能是最好的PySide6中文教程!用代码实例讲解PySide6,附优质Demos、图标库、QSS皮肤、相关文章等分享!项目地址: https://gitcode.com/GitHub_Trending/py/PySide6-Code-Tutorial
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考