Вспышка одной кнопки в секунду - PullRequest
0 голосов
/ 10 декабря 2018

Я начинаю изучать Киви.Приведенный ниже код генерирует сетку кнопок 10x10:

from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.uix.button import Button


class MyApp(App):
    def build(self):
        layout = GridLayout(cols=10)
        for i in range (1, 101):
            layout.add_widget(Button(text=str(i)))
        return layout

MyApp().run()

enter image description here

Я хотел бы знать, как заставить каждую кнопку включать и выключать каждую кнопкувторой, т.е. кнопка 1 включается на 0,5 секунды и выключается на 0,5 секунды, затем кнопка 2 делает то же самое, и она повторяется, пока кнопка 100?

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете использовать kivy.clock для планирования событий:

from functools import partial
from kivy.clock import Clock
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.uix.button import Button


class MyApp(App):
    def build(self):
        self.butts = []
        self.count = 0
        layout = GridLayout(cols=10)
        for i in range (1, 101):
            butt = Button(text=str(i))
            self.butts.append(butt)
            layout.add_widget(butt)

        # schedule call to self.flash every second
        Clock.schedule_interval(self.flash, 1.0)
        return layout

    def flash(self, dt):
        butt = self.butts[self.count]
        butt.state = 'down'

        # schedule call to set the button back to 'normal' in half a second
        Clock.schedule_once(partial(self.setNormal, butt), 0.5)
        self.count += 1
        if self.count == len(self.butts):
            # end the interval scheduling
            return False
        else:
            return True

    def setNormal(self, butt, dt):
        butt.state = 'normal'


MyApp().run()
...