触发屏幕管理器从条件条件中更改Kivy中的屏幕

时间:2019-11-09 15:10:47

标签: python kivy kivy-language

我正在为用户创建日期和时间选择选项。为此,我试图创建一个按钮,当所有微调器都选择了值时,该按钮会移动到下一个屏幕(单击时)。

为使程序识别何时单击了微调框(日期,小时和分钟微调框),我在.kv代码中为每个微调框指定了True的{​​{1}}值。仅当所有微调器都具有state时,屏幕管理器才会从screen_two切换到screen_three。单击微调器(并选择一个选项)时,我分配了state: True

除了下面显示的kv代码中的True语句外,大多数代码都能按预期工作。

我删除了大部分代码,只保留了相关的代码段。

.kv文件

if

检查每个微调器的状态(通过我分配的ID标识各个微调器状态)。

<ScreenTwo>:
    FloatLayout:
        Button:
            background_color: 0, 0, 0, 1
            size: (400, 130)
            size_hint: (None, None)
            pos_hint: {'right': 0.6, 'center_y': 0}
            on_press:
                root.hours_checking() #this function converts the 12hr time to 24hr time
                if day.state == hours.state == minutes.state == AmPm.state == 'True': \
                root.manager.current = 'screen_three'

python文件

        Spinner:
            id: day
            size_hint: None, None
            size: 100, 44
            pos_hint: {'center': (.5, .5)}
            text: 'Day'
            values: 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
            on_text:
                root.on_day_select(self.text) #this function sends back the selected day value in the spinner
                self.state: 'True'
        Spinner:
            id: hours
            size_hint: None, None
            size: 100, 44
            pos_hint: {'center': (.1, .5)}
            text: 'Hour'
            values: '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'
            on_text:
                root.on_hours_select(self.text) #this function sends back the selected hours value in the spinner
                self.state: 'True'
        Spinner:
            id: minutes
            size_hint: None, None
            size: 100, 44
            pos_hint: {'center': (.3, .5)}
            text: 'Minutes'
            values: '00', '15', '30', '45'
            on_text:
                root.on_minutes_select(self.text) #this function sends back the selected minutes value in the spinner
                self.state: 'True'
        Spinner:
            id: AmPm
            size_hint: None, None
            size: 100, 44
            pos_hint: {'center': (.4, .5)}
            text: 'AM/PM'
            values: 'a.m', 'p.m'
            on_text:
                root.on_AmPm_select(self.text) #this function sends back the selected day a.m/p.m value in the spinner
                self.state: 'True'

运行此代码并单击按钮后,我将以24小时时间格式接收12小时时间。这意味着直到kv文件中的screenmanager部分(在代码块中显示,以黄色部分突出显示)之前的所有内容都可以正常运行。我是Kivy和OOP的新手,请帮助我看看我到底出了什么问题。

1 个答案:

答案 0 :(得分:0)

您可以通过创建Spinner的扩展名来创建自己的属性,如下所示:

class MySpinner(Spinner):
    current_selection = BooleanProperty(False)

然后,将Spinner中的kv替换为MySpinner,并在引用state的{​​{1}}的任何地方,将其替换为{{1 }}。