Я создал переменную 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 можно выполнить через свойства, например, в этом случае вы создадите активное свойство 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
поскольку основным условием является запуск таймера.