pyqt QDateEdit:日期选择中的约束日

时间:2015-11-17 07:06:01

标签: python pyqt

在pyqt项目中,我使用QDateEdit小部件让用户选择日期。小部件返回年,月和日。 如何对此窗口小部件应用约束以确保用户只能选择等于1,11或21的日期?

一种简单的方法是将验证函数连接到设置值时触发的事件,例如将日期舍入到最接近的01,11或21。 但我更愿意只选择其中一天。

1 个答案:

答案 0 :(得分:1)

这是我的想法:子类QDateEdit并使用dateChanged信号。

您可以定义有效天数列表(valid=[1,11,21])和字典,以便将常规天数与相应的有效日期相匹配。例如,假设当前日期为1.当用户按向上箭头时,该日期将更改为2(下一个“常规日”)。我们希望将日期更改为11(下一个“有效日期”)。因此,在字典中,您将拥有一个键{2:11}

您可以手动快速编写字典:

 match={2:11,10:1,12:21,20:11,22:21}

每当更改日期时,您首先要检查日期是否已更改(if day in self.valid) 如果它已更改,您可以通过字典定义新的有效日期,并使用setDate进行设置。

class customDate(QtGui.QDateEdit):
    def __init__(self,parent):
        super(customDate, self).__init__(parent)
        self.dateChanged.connect(self.on_change)
        self.valid=[1,11,21]
        self.match={2:11,10:1,12:21,20:11,22:21}

    def on_change(self,date):
        day=date.day()
        if day in self.valid:
            return
        newDay=self.match[day]
        newDate=QtCore.QDate(date.year(),date.month(),newDay)
        self.setDate(newDate)