Kivy让网格闪烁按钮

时间:2014-04-17 20:57:06

标签: python kivy

我为此尝试了多种不同的解决方案,而且我的想法不合时宜。我是Kivy的新手,还在学习。我正在构建一个非常基本的记忆游戏。我需要网格内的按钮按特定顺序闪烁。我相信我可以做到这一点,但我无法弄清楚如何让其中一个按钮闪烁。谁能指出我正确的方向?我知道我只需要它来改变颜色一秒钟然后改回来。

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from random import random
import time


class MemorizeGame(GridLayout):
    def __init__(self, **kwargs):
        super(MemorizeLayout, self).__init__(**kwargs)
        self.cols = 2

        #create buttons
        self.button1 = Button(text='', background_color=(0,0,1,1))
        self.button2 = Button(text='', background_color=(0,1,1,1))
        self.button3 = Button(text='', background_color=(1,0,1,1))
        self.button4 = Button(text='', background_color=(0,1,0,1))
        self.buttonList = [self.button1, self.button2, self.button3, self.button4]

        #add buttons to the screen
        for button in self.buttonList:
            self.add_widget(button)

    def blinkSquare(self):
        #logic to make a square blink

class MemorizeApp(App):

    def build(self):
        game= MemorizeGame()
        return game

if __name__ == "__main__":
    MemorizeApp().run()

1 个答案:

答案 0 :(得分:1)

这是一个如何使用kivy的时钟做的例子。

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from random import random
import time

from kivy.clock import Clock
from functools import partial

def set_color(button, color, *args):
    button.color = color

class MemorizeGame(GridLayout):
    def __init__(self, **kwargs):
        super(MemorizeGame, self).__init__(**kwargs)
        self.cols = 2

        #create buttons                                                                                                                                                                                                            
        self.button1 = Button(text='', background_color=(0,0,1,1))
        self.button2 = Button(text='', background_color=(0,1,1,1))
        self.button3 = Button(text='', background_color=(1,0,1,1))
        self.button4 = Button(text='', background_color=(0,1,0,1))
        self.buttonList = [self.button1, self.button2, self.button3, self.button4]

        #add buttons to the screen                                                                                                                                                                                                 
        for button in self.buttonList:
            self.add_widget(button)

    def blinkSquare(self):
        self.button1.background_color = (1, 1, 1, 1)
        def reset_color(*args):
            self.button1.background_color = (0, 0, 1, 1)
        Clock.schedule_once(reset_color, 1)

        # alternative:
        # Clock.schedule_once(partial(set_color, self.button1, (0, 0, 1, 1)))

    def on_touch_down(self, touch):
        self.blinkSquare()


class MemorizeApp(App):

    def build(self):
        game= MemorizeGame()
        return game

if __name__ == "__main__":
    MemorizeApp().run()

这只是闪烁第一个按钮,但我相信你可以扩展它以完全按照你想要的那样。

您可能会发现使用颜色重置功能创建自己的按钮子类是最好的,而不是每次都创建一个新函数。