from kivy.app import App
from kivy.clock import Clock
from kivy.logger import Logger
from kivy.uix.gridlayout import GridLayout
from kivy.uix.checkbox import CheckBox
from kivy.uix.label import Label
class LeftAlignedLabel(Label):
def __init__(self, *args, **kwargs):
super(LeftAlignedLabel, self).__init__(*args, **kwargs)
self.bind(size=self.setter("text_size"))
class CalloutList(App):
def build(self):
return GridLayout(cols=2)
def on_start(self):
firefighter_file = open("names.txt")
Clock.schedule_once(lambda dt: self.read_name(firefighter_file))
def state_change(self, name, v, *args):
Logger.info("CalloutList: %s changed to %s", name, v)
def read_name(self, firefighter_file, *args):
name = firefighter_file.readline()
if name is not None: # check for EOF
name = name.strip()
if name: # don't use blank lines
self.root.add_widget(CheckBox(
size_hint=(None, None), width=50, height=40,
on_press=lambda w: self.state_change(name, w.state == 'down')))
self.root.add_widget(LeftAlignedLabel(
text=name, size_hint_y=None, height=40, valign='middle'))
Clock.schedule_once(lambda dt: self.read_name(firefighter_file))
if __name__ == "__main__":
CalloutList().run()