Kivy Clock & Условные заявления

1

Я создал переменную timer_loop для непрерывной работы. Я хотел бы сделать условные утверждения с другими переменными, но я не могу этого сделать. Ниже приведен пример, я пытаюсь "что-то делать" каждые 30 минут, если переключатель активирован. Любая обратная связь будет принята с благодарностью :)

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
import datetime
import time

theRoot = Builder.load_string('''

StackLayout:
    orientation: 'lr-tb'
    padding: 10
    spacing: 5

    Label:
        text: "Zone 1 Valve"
        size_hint: .5, .1

    Switch:
        id: switch_id
        on_active: app.switch_on1(self, self.active)
        size_hint: .5, .1
''')

class theApp(App):

    def build(self):
        Clock.schedule_interval(self.timer_loop, 2)
        return theRoot

    def timer_loop(self, dt):  
        now_minute = int(time.strftime("%M"))

        if switch_on1.active & now.minute ==30 : # how do I use the varible switch_on1 in this loop for conditonal statements???
            print("Do something")
        else:
            print("Do nothing")

    def switch_on1(self, instance, value):
        if value is True:
            print("Switch 1 On")
        else:
            print("Switch 1 Off")

if __name__ == '__main__':
    theApp().run()
Теги:
kivy
kivy-language

1 ответ

0
Лучший ответ

Всегда рекомендуется видеть класс как черный ящик, который мы можем установить для ввода и получения выходов, а в kivy можно выполнить через свойства, например, в этом случае вы создадите активное свойство StackLayout которое отражает активное свойство switch_id, и поскольку theRoot - это объект StackLayout, видимый из python, мы его используем:

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
import time

theRoot = Builder.load_string('''
StackLayout:
    active: switch_id.active # <---
    orientation: 'lr-tb'
    padding: 10
    spacing: 5

    Label:
        text: "Zone 1 Valve"
        size_hint: .5, .1

    Switch:
        id: switch_id
        size_hint: .5, .1
''')

class theApp(App):
    def build(self):
        Clock.schedule_interval(self.timer_loop, 2)
        return theRoot

    def timer_loop(self, dt):  
        now_minute = int(time.strftime("%M"))
        if theRoot.active and now_minute == 30: # <---
            print("Do something")
        else:
            print("Do nothing")


if __name__ == '__main__':
    theApp().run()

Как вы понимаете, нет необходимости использовать switch_on1 поскольку основным условием является запуск таймера.

  • 0
    Ваш пример был очень полезным и работал отлично. Спасибо. У меня есть последний вопрос, если у вас есть время:
  • 0
    Если бы switch_id был во всплывающем окне, как бы вы сделали это? Это последнее препятствие, которое у меня есть, прежде чем я смогу двигаться вперед. Ваша помощь очень ценится.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню