I created the variable timer_loop to run continuously. I'd like to make conditional statements with other variables, but I am unable to do so. Below is an example, I am trying to "do something" every 30 minutes if the switch is activated. Any feedback would be greatly appreciated :)
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()
It is always advisable to see a class as a black box that we can establish input and obtain outputs and that in kivy can be done through properties, for example in this case you create the active property of StackLayout
that reflects the active property of switch_id, and since theRoot
is the StackLayout
object that is visible from python we use it:
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()
As you realize it is not necessary to use switch_on1
since the main condition is the triggering of the timer.