Open In App

How to Disable back button on android for kivy app ?

Improve
Improve
Like Article
Like
Save
Share
Report

In this article, we will develop a GUI window using kivy framework of python, and we will disable the android back button from the window.

Approach

  • When the kivy app starts the on_start() method will call automatically and this method will import EventLoop from kivy.
  • Using this EventLoop we will bind a method hook_keyboard() to the current window for detecting key presses means whenever we will press any key this hook_keyboard() method will call automatically, and it checks whether we have pressed back button (code for this back button is 27).
  • Then we are checking whether we are on the main screen or not if yes then we simply return True(and this app will get terminated) otherwise we are not returning anything and this program will not do anything on keypress.

Implementation

Python3




# importing kivy App
from kivy.app import App
  
# importing BoxLayout from kivy
from kivy.uix.boxlayout import BoxLayout
  
# importing ScreenManager and Screen from kivy
from kivy.uix.screenmanager import ScreenManager, Screen
  
  
class MainWindow(BoxLayout):
    pass
  
  
class uiApp(App):
    def on_start(self):
        from kivy.base import EventLoop
          
        # attaching keyboard hook when app starts
        EventLoop.window.bind(on_keyboard=self.hook_keyboard)
  
    def hook_keyboard(self, window, key, *largs):
          
        # key == 27 means it is waiting for 
        # back button tobe pressed
        if key == 27:
              
            # checking if we are at mainscreen or not
            if self.screen_manager.current == 'mainscreen':
                  
                # return True means do nothing
                return True
            else:
                  
                # return anything except True result in 
                # closing of the app on button click
                # if are not at mainscreen and if we press 
                # back button the app will get terminated
                pass
  
    def build(self):
        self.screen_manager = ScreenManager()
  
        # adding Designed screen to ScreenManager
        self.mainscreen = MainWindow()
        screen = Screen(name='mainscreen')
        screen.add_widget(self.mainscreen)
        self.screen_manager.add_widget(screen)
  
        # returning screen manager
        return self.screen_manager
  
  
if __name__ == "__main__":
      
    # running the object of app
    uiApp().run()


Output:

This is the main design of the visible screen:

<MainWindow>:
    BoxLayout:
    BoxLayout:
        canvas.before:
            Color:
                rgba:[0,1,0,1]
            Rectangle:
                pos:self.pos
                size:self.size
    BoxLayout:

Note: This app wouldn’t do anything on running on pc it simply displays a screen on pc while the output of this app can be checked perfectly on an android device.



Last Updated : 21 Apr, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads