在pyqt项目中,我使用QDateEdit小部件让用户选择日期。小部件返回年,月和日。 如何对此窗口小部件应用约束以确保用户只能选择等于1,11或21的日期?
一种简单的方法是将验证函数连接到设置值时触发的事件,例如将日期舍入到最接近的01,11或21。 但我更愿意只选择其中一天。
答案 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)