在Kivy中如何在按钮按下时改变背景颜色?

5
我的应用程序只有一个默认背景颜色的按钮。我想在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)

我希望在我的Highest类中实现。请指导。提前致谢。
4个回答

9

但是 on_press 事件没有任何反应。

实际上,它确实有反应,您设置了 Highest 实例的 background_color 属性 - 但您没有看到任何变化,因为它不使用 background_color。为了让它可见,您可以这样做:

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

将此代码放入按钮规则中,self指的是您实际想要更改的按钮实例。

4

我知道这个问题早就被问过了,但是当我尝试按照上面的建议操作时,我的按钮从未恢复到原来的颜色。最终我解决了这个问题,我添加了on_release来将其更改为我想要的任何颜色:

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

如果我遇到了这个问题,想必有人也会想知道这个问题的解决方法。


1
如果您希望将其保留在函数内,还可以为按钮添加一个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

0

我只想在 on_press 事件中将其背景颜色更改为另一种颜色。

我实际上遇到了类似的问题。我正在使用 Kivy 的所有习惯用法 Python。我使用回调函数 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)

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

实际上我需要根据变量在不同条件下给出不同的颜色

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

附:我还看到您正在使用单独的 Screen 类,但这在此处并不重要


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接