You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5中如何在QDateEdit组件中禁用周末仅允许选择工作日

QDateEdit禁用周末、仅支持选择工作日实现方案

要实现QDateEdit仅允许选择工作日,你需要自定义日历弹窗组件,重写日期选择逻辑,再绑定到原有的QDateEdit实例上即可。

完整实现代码

from PyQt5.QtCore import QDate, Qt
from PyQt5.QtWidgets import QCalendarWidget, QDateEdit
import datetime

# 自定义仅支持工作日选择的日历类
class WeekdayCalendar(QCalendarWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        # 预设周末文本样式为灰色不可选状态
        weekend_format = self.dateTextFormat(QDate.currentDate())
        weekend_format.setForeground(Qt.gray)
        weekend_format.setBackground(Qt.lightGray)
        self.setWeekdayTextFormat(Qt.Saturday, weekend_format)
        self.setWeekdayTextFormat(Qt.Sunday, weekend_format)

    def selectDate(self, date):
        # 拦截日期选择事件,仅允许选中工作日
        if date.dayOfWeek() not in (Qt.Saturday, Qt.Sunday):
            super().selectDate(date)

# 你的原有代码修改部分
self.date =  QDateEdit(calendarPopup = True)
# 绑定自定义日历组件
self.date.setCalendarWidget(WeekdayCalendar())
self.date.setDisplayFormat("dd-MM-yyyy")
self.date.setMinimumDate(QDate(2021,10,1))
self.date.setDate(QDate(datetime.today()))

# 可选:增加手动输入校验,避免用户直接输入周末日期
def check_weekday(date):
    if date.dayOfWeek() == Qt.Saturday:
        self.date.setDate(date.addDays(2))
    elif date.dayOfWeek() == Qt.Sunday:
        self.date.setDate(date.addDays(1))
self.date.dateChanged.connect(check_weekday)

功能说明

  • 日历弹窗内的周六、周日会显示为灰底灰字,点击无响应无法选中
  • 增加输入校验后,用户手动输入周末日期会自动跳转至最近的下一个工作日
  • 原有日期格式、最小日期限制等配置不受影响

内容的提问来源于stack exchange,提问作者Florian.G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:45:04