【问题标题】:Greying out unavailable dates kivymd date picker or Kivy calendar将不可用的日期显示为灰色 kivymd 日期选择器或 Kivy 日历
【发布时间】:2020-05-08 08:21:40
【问题描述】:

我正在尝试将 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()

【问题讨论】:

  • 您解决了这个问题吗?我也想知道怎么做

标签: python kivy kivy-language


【解决方案1】:

您可以在 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()

【讨论】:

  • 我没有意识到这一点,谢谢。但它仍然不能解决特定日期变灰的问题
  • @CallumPurcell 它没有。我在这里问过类似的问题,但还没有找到解决方案:stackoverflow.com/questions/61881407/…
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多