如何更改kivy中按下按钮的背景颜色?

How to change background color of button on press in kivy?

我的应用有一个带有默认背景颜色的按钮。我只想在 on_press 事件中将其背景颜色更改为另一种颜色。您可能认为它类似于 html 的已访问和未访问的超链接,即单击链接时,它会更改其颜色。

我的尝试:

#!/usr/bin/kivy
import kivy
kivy.require('1.7.2')

from random import random
from random import choice
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.properties import StringProperty

Builder.load_string("""
<Highest>:
    GridLayout:
        cols: 1
        Button:
            text: "Hi"
            on_press: root.new()
""")

class Highest(Screen):
    def new(self):
        self.background_color=(1.0, 0.0, 0.0, 1.0)


# Create the screen manager
sm = ScreenManager()
sm.add_widget(Highest(name='Highest'))

class TestApp(App):

    def build(self):
        return sm

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

但是 on_press

上没有任何反应

@inclement

实际上,我试图将我的问题最小化。

我真正需要的是根据一个变量在不同的条件下给出不同的颜色

class Highest(Screen):
    def new(self):
        if(a==5):
            self.background_color=(1.0, 0.0, 0.0, 1.0)
        else:
            self.background_color=(1.0, 1.0, 1.0, 1.0)

所以我想在我的 class 最高点实施。请指导。提前致谢。

But nothing happens on on_press

它确实如此,您设置了最高实例的 background_color 属性 - 但您看不到任何事情发生,因为它没有将 background_color 用于任何事情。

你可以改为:

on_press: self.background_color = (1.0, 0.0, 0.0, 1.0)

通过将其放入 Button 规则,self 引用您实际想要更改的按钮实例。

如果你想把它放在一个函数中,你也可以给按钮添加一个id,然后从最高实例改变它。

Builder.load_string("""
<Highest>:
    GridLayout:
        cols: 1
        Button:
            id: button_one
            text: "Hi"
            on_press: root.new()
""")

然后你可以参考id来改变颜色...

class Highest(Screen):
    def new(self):
        self.ids['button_one'].background_color = 1.0, 0.0, 0.0, 1.0

I just want to change its background color to another color on on_press event.

我其实运行遇到了类似的问题。我将所有惯用的 python 用于 kivy。我使用回调函数 on_press

Class MainWindow(ScreenManager):
    <..code to add screens and add widget to screen...>
    <...>

    def add_button(self):
        Button(id='button1', text='Hello %d'%i, size_hint=(0.2,0.2),
                              on_press=self.callback, background_color=[1,0,0,1])

在我的回调中,

    def callback(self, value):
            print '%s pressed.'%value
            print value.id
            value.background_color= (0,1,0,1)

就是这样。这会将按钮的背景颜色从红色更改为绿色。

What i actually need is to give different colors on different conditions based on a variable

您可以在回调中实现该逻辑.. 将 a 传递给回调(我建议使用 partial 来实现)

ps。我还看到您正在为 Screen 使用单独的 class,但这在这里无关紧要

我知道不久前有人问过这个问题,但是当我尝试按照上述建议进行操作时,我的按钮再也没有变回原来的颜色。我最终解决问题的方法是添加 on_release 将其更改为我想要的任何颜色:

on_press: self.background_color = (0, 1, 0, 1)
on_release: self.background_color = (1, 0, 0, 1)

我想如果我遇到了这个问题,有人可能想知道这个