In this shot, we will learn how to disable and enable a button in Kivy. This is necessary for many scenarios, depending on the project you work on.
Imagine that a user accidentally hits the submit button on one of your apps, but there is nothing in the text input box. In this situation, it would be useful to be able to disable the submit button, because it anticipates that the user might hit the submit button when they are not ready.
Let’s move on and learn how to code this!
First, we need to import the libraries, add the classes into our .py
file, and load the .kv
file into our .py
file.
import kivy from kivy.app import App from kivy.uix.widget import Widget from kivy.lang import Builder # load in the .kv file Builder.load_file('main.kv') class Shot(Widget): pass class ShotApp(App): def build(self): return Shot() if __name__ == '__main__': ShotApp().run()
Now, we have the function of our app. It is time to add the buttons in the design file main.kv
.
Let’s add two buttons called “Button 1” and “Button 2”, and disable “Button 2”. To do this we will use a Boolean statement from Kivy, disabled: True
.
<Shot> BoxLayout: orientation: "horizontal" size: root.width, root.height Button: text: "Button 1" size_hint: (1,1) disabled: False Button: text: "Button 2" size_hint: (1,1) disabled: True
Every button you add into Kivy will read as disabled: False
automatically, so there is no need to add the disabled
method on each button. In our case, though, we will add it to both of our buttons.
You now know how to disable a button. However, this does not help you unless you know how to enable “Button 2” and disable “Button 1”. For the remainder of this shot, we will go over how to do this. It is fairly simple.
We need to add a few more things to our buttons before we move back into the logic in the .py
file. Each button needs to have an id:
method and an on_press:
method added.
<Shot> BoxLayout: orientation: "horizontal" size: root.width, root.height Button: # BELOW IS THE ID TAG id: but_one text: "Button 1" size_hint: (1,1) disabled: False # BELOW IS THE ON_PRESS TAG on_press: root.disable_other() Button: # BELOW IS THE ID TAG id: but_two text: "Button 2" size_hint: (1,1) disabled: True # BELOW IS THE ON_PRESS TAG on_press: root.disable_other()
Finally, we can move back into our .py
file! All we need to do is add our disable_other()
method to our class Shot()
. Then, we add an if
statement to disable_other()
for our app to determine when our enabled button is pressed. It will disable itself and enable the other button.
It should look something like this:
import kivy from kivy.app import App from kivy.uix.widget import Widget from kivy.lang import Builder Builder.load_file('main.kv') class Shot(Widget): # Method to disable one button and activate the other. def disable_other(self): if self.ids.but_two.disabled == False: self.ids.but_two.disabled = True self.ids.but_one.disabled = False print('Button One is now disabled. Button Two is now enabled.') else: self.ids.but_one.disabled = True self.ids.but_two.disabled = False print('Button One is now enabled. Button Two is now disabled.') class ShotApp(App): def build(self): return Shot() if __name__ == '__main__': ShotApp().run()
You now know to disable and enable your buttons with Kivy on demand. Have fun coding!
RELATED TAGS
CONTRIBUTOR
View all Courses