Creating a GUI in Python With TtkBootstrap
Tags: python, ttkbootstrap, gui, programming
Published: 2024-02-21 09:56:35

This article walks you through developing a simple desktop application using Python, TtkBootstrap, and the Requests library. 

The goal is to fetch and display a daily quote from an external API, offering users a refreshing piece of wisdom every day and showcasing the ease of use of TtkBootstrap.

You can download the complete source code [here](https://devasservice.lemonsqueezy.com/checkout/buy/2c3beeea-862a-4821-accc-acb0b486956c).

---

## What is TtkBootstrap? 
[TtkBootstrap](https://ttkbootstrap.readthedocs.io/en/latest/) is a Python library that enhances the look and functionality of Tkinter applications by providing them with modern and visually appealing styles. 

Built on top of Tkinter and the themed Tk (ttk) modules, TtkBootstrap brings the power of Bootstrap's design elements into the world of Python GUI development. 

At its core, TtkBootstrap is designed to make it easier for Python developers to create GUI applications that look good and are user-friendly without having to dive deep into custom styling or web development techniques. 

### Themes
One of the standout features of TtkBootstrap is its collection of pre-defined themes that mimic the styles found in Bootstrap, a popular front-end framework for web development. 

These themes allow developers to quickly style their applications with a modern look and feel. Themes can be applied globally to the application, affecting all widgets and thereby ensuring a consistent design language across the interface. 

TtkBootstrap includes a variety of themes, from light to dark, and even allows for custom themes.

### Widgets
TtkBootstrap extends the standard ttk widgets, making them more flexible and visually appealing. 

This includes buttons, labels, entry fields, combo boxes, etc. Each widget can be easily styled using the Bootstrap theme's color and size conventions, such as "primary", "success", "info", "warning", and "danger" for different widget states or purposes. 

This simplification of widget styling abstracts away the need for detailed CSS or Tk styling knowledge.

### Integration with Tkinter
TtkBootstrap is built on top of Tkinter and ttk, meaning it inherits and extends the functionality of these libraries. 

Developers familiar with Tkinter will find it easy to adopt TtkBootstrap, as it follows similar principles for creating and managing widgets, but with the added benefits of improved aesthetics and usability. 

It seamlessly integrates into existing Tkinter applications, allowing for incremental enhancements without the need for a complete rewrite.

### Customization and Flexibility
While TtkBootstrap offers a straightforward way to apply themes and styles, it also supports customization. 

Developers can adjust the size, color, and font of individual widgets or create custom themes to fit their application's unique requirements. 

This flexibility ensures that while TtkBootstrap simplifies the design process, it does not limit the developer's creativity or the application's brand identity.

### Ease of Use
TtkBootstrap is designed with ease of use in mind. Applying a theme to a Tkinter application can be as simple as initializing the ttk.Window with a themename parameter. 

The library's API is intuitive, leveraging familiar Tkinter concepts and structures, which reduces the learning curve for those already acquainted with basic Tkinter development.

---

## Creating the Application
Before diving into the code, ensure your Python environment is set up correctly. 

You need Python installed on your system, alongside the ttkbootstrap and requests libraries. 

If you haven't installed these libraries yet, you can do so by running:

```
pip install ttkbootstrap requests
```

The application's core functionality revolves around fetching a daily quote from an API and displaying it within a user-friendly interface. 

We'll break down the code into manageable sections and explain each part.

### The Setup
We begin by importing the necessary modules. requests handles the API call, ttkbootstrap powers our GUI, and threading is used to perform the API request in the background, ensuring the GUI remains responsive.

```
import requests
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
from tkinter import messagebox
from threading import Thread
```

### Fetching the Quote
The fetch_quote function performs the API call. For this example, we're using the Quotable API endpoint (https://api.quotable.io/).  This function makes a GET request to the API and parses the JSON response to retrieve the quote and its author.

```
# Fetch a random quote from the API
def fetch_quote():
    try:
        # Replace the URL with the actual URL of your quote API
        response = requests.get("https://api.quotable.io/quotes/random?limit=1")
        if response.status_code == 200:
            data = response.json()
            quote = data[0]['content']
            author = data[0]['author']
            return quote, author
        else:
            messagebox.showerror("Error", "Failed to fetch quote from the API.")
    except Exception as e:
        messagebox.showerror("Error", f"An error occurred: {e}")

```

### Updating the GUI
The update_quote function calls fetch_quote and updates the GUI elements with the retrieved quote and author. The fetch_quote_thread function wraps update_quote in a thread, allowing the GUI to remain interactive while the quote is being fetched.

---

Full article at: [Creating a GUI in Python With TtkBootstrap](https://developer-service.blog/creating-a-gui-in-python-with-ttkbootstrap/)