python - 将不可用的日期显示为灰色 kivymd 日期选择器或 Kivy 日历
问题描述
我正在尝试在 kivymd 日期选择器上将不可用的日期变灰(如果更容易的话,很高兴使用 Kivy 日历)并使它不会让用户单击变灰的日期,或者它只会弹出一个说此日期不可用。
我知道如何检查日期是否无法选择,我可以根据包含不可用日期的列表检查选择的日期,如果选择在列表中,我可以弹出一个弹出窗口,但我不确定该怎么做设计方面 - 当用户打开日历时将不可用的日期显示为灰色。
from kivy.lang import Builder
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivymd.app import MDApp
from kivymd.uix.picker import MDDatePicker
kv = """
<Pickers@Screen>
name: "pickers"
BoxLayout:
orientation: "vertical"
spacing: dp(20)
pos_hint: {"center_x": .5, "center_y": .5}
size_hint_y: None
height: self.minimum_height
MDRaisedButton:
text: "Open date picker"
pos_hint: {"center_x": .5}
opposite_colors: True
on_release: app.show_example_date_picker()
MDLabel:
id: date_picker_label
theme_text_color: "Primary"
halign: "center"
BoxLayout:
size_hint: None, None
size: self.minimum_size
pos_hint: {"center_x": .5}
Label:
theme_text_color: "Primary"
text: "Start on previous date"
size_hint_x: None
width: self.texture_size[0]
color: 0, 0, 0, 1
MDCheckbox:
id: date_picker_use_previous_date
size_hint: None, None
size: dp(48), dp(48)
"""
class MainApp(MDApp):
previous_date = ObjectProperty()
def __init__(self, **kwargs):
self.title = "KivyMD Examples - Date Picker"
super().__init__(**kwargs)
def build(self):
Builder.load_string(kv)
self.root = Factory.Pickers()
def show_example_date_picker(self, *args):
if self.root.ids.date_picker_use_previous_date.active:
pd = self.previous_date
try:
MDDatePicker(self.set_previous_date,
pd.year, pd.month, pd.day).open()
except AttributeError:
MDDatePicker(self.set_previous_date).open()
else:
MDDatePicker(self.set_previous_date).open()
def set_previous_date(self, date_obj):
self.previous_date = date_obj
self.root.ids.date_picker_label.text = str(date_obj)
if __name__ == "__main__":
MainApp().run()
解决方案
您可以在 show_date_picker 函数中设置最小和最大日期。超出范围的所有内容都将变灰。
def show_date_picker(self):
min_date = datetime.strptime("2020:02:15", '%Y:%m:%d').date()
max_date = datetime.strptime("2020:05:30", '%Y:%m:%d').date()
date_dialog = MDDatePicker(
callback=self.get_date,
min_date=min_date,
max_date=max_date,
)
date_dialog.open()
推荐阅读
- html - 要检查默认角度的白色重新加载复选框
- php - 使用 CentOS 8 在 PHP 7.4 中安装 pdo_sqlsrv 驱动程序
- serialization - 如何在 Rust 中抽象出远程或本地的可序列化对象?
- npm - 未捕获的错误:“目标”是必需选项 - Svelte
- mysql - 在 LIMIT 子句中使用算术运算符和/或括号
- oracle - 将对象作为输出参数 PL/SQL 传递时对未初始化组合的 Oracle 引用
- xamarin.forms - Web 视图 Xamarin 表单
- gtag.js - Google Analytics - 收入不正确(退款)
- c++ - C++:为什么我可以在这里访问私有属性?
- postgresql - EF Core - 在 PostgreSQL 13 中将列类型从 varchar 更改为 uuid:列不能自动转换为 uuid 类型