使用按钮的Kivy颜色变化

时间:2015-05-27 21:26:09

标签: python colors kivy

我目前正在使用Kivy和Python编写一些代码。我试图这样做,当你点击按钮时,按钮的文字会改变颜色。

然而,当我点击按钮时,颜色并不像我想要的那样。

任何想法如何解决这个问题?我只是在学习Kivy,也许答案比我想象的要容易。 .py文件位于

之下
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.button import Button
from kivy.graphics import Color
class TextBubbleSample(Widget):
    bubble = ObjectProperty(None)

class TextBubble(Widget):
        pass

class Talk(Button):
    btn = Button
    def button_press(self):
        btn.bind(on_state = self.on_event)

def on_event(self):
        btn.color = 1,0,0,1

class TextBubbleApp(App):
    def build(self):
        return TextBubbleSample()

if __name__ == '__main__':
    TextBubbleApp().run()




and here is the .kv file

#:kivy 1.0.9

<TextBubbleSample>:
    bubble: text_bubble
    btn: click_here

    TextBubble:
        id: text_bubble
        x: root.x
        center_y: root.center_y

    Talk:
        id: click_here
        x: 10
        center_y: 220
        text: "Talk to me."
        color: 0,0,1,1

<TextBubble>:
    canvas:
        Color:
            rgba: 1,0,0,1
        Rectangle:
            pos: 10, 10
            size: 780, 150

    Label:
        color: 0,0,1,1
        font_size: 35  
        center_x: 200
        top: root.top - 200
        text: "I am talking"

2 个答案:

答案 0 :(得分:1)

您不应该/不能像这样使用变量btn。使用self.bind(on_state=self.on_event)然后self.color = (1, 0, 0, 1)

答案 1 :(得分:0)

您应该尝试缩短代码长度,在这种情况下您不需要使用任何ID。

可能有一个简单的替代方案来解决这个问题。 在.py文件(Talk类)中添加。

class Talk(Button):
....
def on_release(self):
    self.color = 1,0,0,1

并在.kv文件中添加

Talk:
    text: "talk to me"
    ....
    on_release: self.on_release

修改

你也可以这样做

class Singularity(BoxLayout):
    def __init__(self,**kwargs):
        super(Singularity,self).__init__(**kwargs)
        self.b = Button(text = "hello",on_press = self.on_press)
        self.add_widget(self.b)
    def on_press(self,event):
        if event.color == [1,0,0,1]:
            event.color = [0,0,1,1]
        else:
            event.color=[1,0,0,1]