Saurabh Shrivastava
Saurabh Shrivastava

Reputation: 1484

How to change color of disabled widget in Kivy?

This is just a smaller part of my application.
I have a button "Hi".
I have 2 more buttons "1" and "2" in gridlayout and id is w_10
On pressing "Hi", w_10 will becomes disabled.
Now, i dont want "1" and "2" to change color after w_10 is disabled, i want to stay them same as past state ie green color. Please improve my code.

My code:

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

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

Builder.load_string("""
<MenuScreen>:
    GridLayout:
        cols: 1
        Button:
            text: 'HI'
            on_press: root.change()
        GridLayout:
            id: w_10
            rows:1
            Button:
                text: '1'
                background_normal: ''
                background_color:(0.207, 0.635, 0.423, 0.9)
            Button:
                text:'2'
                background_normal: ''
                background_color:(0.207, 0.635, 0.423, 0.9)               
""")

# Declare both screens
class MenuScreen(Screen):
    def change(self):
        self.ids['w_10'].disabled=True

sm = ScreenManager()
menu = MenuScreen(name='menu')
sm.add_widget(menu)

class TestApp(App):
    def build(self):
        return sm

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

Upvotes: 3

Views: 4158

Answers (1)

Nykakin
Nykakin

Reputation: 8747

Set background_disabled_normal property of yout buttons to an emtpy string:

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

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

Builder.load_string("""
<MenuScreen>:
    GridLayout:
        cols: 1
        Button:
            text: 'HI'
            on_press: root.change()
        GridLayout:
            id: w_10
            rows:1
            Button:
                background_disabled_normal: ''
                text: '1'
                background_normal: ''
                background_color:(0.207, 0.635, 0.423, 0.9)
            Button:
                background_disabled_normal: ''
                text:'2'
                background_normal: ''
                background_color:(0.207, 0.635, 0.423, 0.9)               
""")

# Declare both screens
class MenuScreen(Screen):
    def change(self):
        self.ids['w_10'].disabled = True

sm = ScreenManager()
menu = MenuScreen(name='menu')
sm.add_widget(menu)

class TestApp(App):
    def build(self):
        return sm

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

If you want to have text color unchanged as well use also disabled_color propertry:

Button:
    background_disabled_normal: ''
    disabled_color: 1, 1, 1, 1
    text: '1'
    background_normal: ''
    background_color:(0.207, 0.635, 0.423, 0.9)

Upvotes: 2

Related Questions