Kivy is an open-source Python library that allows you to build cross-platform GUI applications. It is designed for rapid development and easy deployment on multiple platforms, including Windows, macOS, Linux, iOS, and Android. Kivy uses a unique language called Kv language for defining user interfaces, and it provides a powerful set of tools for creating interactive and responsive applications.
In this tutorial, I will guide you through the process of getting started with Kivy and building your first cross-platform GUI application.
Step 1: Installing Kivy
The first step is to install Kivy on your machine. You can install Kivy using pip, the Python package manager. Open a terminal or command prompt and run the following command:
pip install kivy
This will install Kivy along with all its dependencies on your machine.
Step 2: Creating a Kivy App
Now that Kivy is installed, let’s create a simple Kivy application. Create a new Python file, for example, main.py
, and open it in your favorite code editor.
In the main.py
file, import the necessary modules:
from kivy.app import App
from kivy.uix.label import Label
Next, define a class for your application that inherits from the App
class:
class MyApp(App):
def build(self):
return Label(text='Hello, World!')
In the build()
method, we are creating an instance of the Label
widget with the text ‘Hello, World!’ and returning it.
Step 3: Running the Kivy App
To run your Kivy application, instantiate your MyApp
class and call its run()
method. Add the following code at the end of your main.py
file:
if __name__ == '__main__':
MyApp().run()
Save the file and run it using the following command in the terminal:
python main.py
This will launch your Kivy application, and you should see a window with the text ‘Hello, World!’ displayed.
Step 4: Defining the GUI Layout
Kivy provides a flexible layout system for organizing widgets in your application. You can use different layout classes such as BoxLayout
, GridLayout
, FloatLayout
, etc., to arrange widgets in rows, columns, or arbitrary positions.
Let’s modify our MyApp
class to include a more complex GUI layout using a GridLayout
:
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
class MyApp(App):
def build(self):
layout = GridLayout(cols=2)
layout.add_widget(Label(text='First Name:'))
layout.add_widget(Label(text='Last Name:'))
layout.add_widget(Button(text='Submit'))
return layout
In this example, we created a GridLayout
with two columns and added two Label
widgets and a Button
widget to the layout.
Step 5: Running the Updated Kivy App
Save the changes to your main.py
file and run it again using the command python main.py
. You should now see a window with two labels (‘First Name:’ and ‘Last Name:’) and a button labeled ‘Submit’ arranged in a grid layout.
Step 6: Creating Interactive UI Elements
Kivy provides a wide range of interactive widgets that you can use to build responsive GUI applications. Some of the common widgets include buttons, sliders, text inputs, checkboxes, etc.
Let’s modify our MyApp
class to include a text input widget for entering the user’s name:
from kivy.uix.textinput import TextInput
class MyApp(App):
def build(self):
layout = GridLayout(cols=2)
layout.add_widget(Label(text='First Name:'))
layout.add_widget(TextInput())
layout.add_widget(Label(text='Last Name:'))
layout.add_widget(TextInput())
layout.add_widget(Button(text='Submit'))
return layout
In this example, we replaced the Label
widgets with TextInput
widgets for entering the user’s first and last names.
Step 7: Adding Functionality to the App
To make your Kivy application interactive, you can define event handlers for user actions, such as button clicks. You can use the Kivy event dispatcher system to bind events to functions in your application.
Let’s modify our MyApp
class to display a message when the ‘Submit’ button is clicked:
from kivy.uix.popup import Popup
class MyApp(App):
def build(self):
layout = GridLayout(cols=2)
first_name_input = TextInput()
last_name_input = TextInput()
submit_button = Button(text='Submit')
submit_button.bind(on_press=self.show_message)
layout.add_widget(Label(text='First Name:'))
layout.add_widget(first_name_input)
layout.add_widget(Label(text='Last Name:'))
layout.add_widget(last_name_input)
layout.add_widget(submit_button)
return layout
def show_message(self, instance):
first_name = instance.parent.children[1].text
last_name = instance.parent.children[3].text
message = f'Hello, {first_name} {last_name}!'
popup = Popup(title='Greetings', content=Label(text=message), size_hint=(None, None), size=(400, 200))
popup.open()
In this example, we defined a new method show_message()
that will be called when the ‘Submit’ button is pressed. The method retrieves the values entered in the text input fields and displays a greeting message in a popup window.
Step 8: Running the Final Kivy App
Save the changes to your main.py
file and run it again using the command python main.py
. Enter your first and last names in the text input fields and click the ‘Submit’ button. You should see a popup window displaying a personalized greeting message.
Congratulations! You have successfully built a simple cross-platform GUI application using Kivy. Feel free to explore more advanced features of Kivy and experiment with different layout options and interactive widgets to create more sophisticated applications. Kivy documentation and community forums are great resources for learning more about Kivy and getting help with any issues you may encounter. Happy coding!
How to you deploy it on iOS or dmg for mac?
Where is the second video?
Kivy is fantastic. I also highly recommend KivyMD and asynckivy if you decide to write Kivy applications.
Is there a WYSIWYG GUI editor like Delphi or Visual Basic?