Python Currency Converter illustration showing a GUI app with exchange rates and Python logo

Python Currency Converter: A Complete Guide to Building a Tkinter-Based App

Python currency converter applications are among the most popular beginner-friendly projects because they combine API requests, GUI development, and real-world usefulness. In this guide, we will break down a fully working currency converter built with Tkinter, ttk, and Requests, and explain each part of the code in a simple and structured way.

This tutorial is perfect for beginners who want to understand GUI development, API data fetching, and currency conversion logic in real applications.


What You Will Learn in This Tutorial

In this python currency converter article, you will understand:

  • How to fetch live exchange rates using an API
  • How to build a graphical interface (GUI) with Tkinter
  • How currency conversion works in code
  • How to organize a Python project into clean, logical sections
  • How to apply a dark theme and modern UI style

We will divide the entire code into four main sections, making it easier to follow and understand.


Part 1: Fetching Currency Data from an API

This is the backend core of the python currency converter. The program needs real exchange rates, so we fetch them from the Frankfurter API at the start of the program.

def fetch_data():
    try:
        resp_currencies = requests.get("https://api.frankfurter.app/currencies")
        resp_currencies.raise_for_status()
        currencies_data = resp_currencies.json()

        base_currency = "USD"
        resp_rates = requests.get(f"https://api.frankfurter.app/latest?from={base_currency}")
        resp_rates.raise_for_status()
        rates_data = resp_rates.json()

        return currencies_data, rates_data["rates"], base_currency

    except Exception as e:
        messagebox.showerror("Error", f"Failed to fetch data:\n{e}")
        return None, None, None

✔ Explanation

Here the application:

  • Retrieves all supported currencies
  • Fetches exchange rates for a default base currency (USD)
  • Handles errors safely using try/except
  • Returns three values:
    • the list of currencies
    • the dictionary of exchange rates
    • the base currency

This makes the python currency converter capable of handling multiple currencies dynamically without hardcoding values.


Part 2: Conversion Logic — Turning User Input into Results

The function below performs the actual math behind the currency conversion.

def convert_local():
    try:
        amount = float(entry_amount.get())
    except:
        messagebox.showerror("Error", "Please enter a valid amount")
        return

    from_curr = cb_from.get()
    to_curr = cb_to.get()

    result = amount * (rates[to_curr] / rates[from_curr])
    lbl_conv_result.config(text=f"{amount} {from_curr} = {result:.4f} {to_curr}")

✔ Explanation

This section is the heart of the python currency converter:

  • It reads the amount inserted by the user
  • Ensures the amount is a valid number
  • Gets the “from” and “to” currencies selected in the dropdown menus
  • Uses the formula:
converted_amount = amount × (RateTo / RateFrom)
  • Finally, it displays the result in a nicely formatted label

Because we previously fetched live rates, this function instantly produces accurate conversions between any two currencies.


Part 3: Displaying an Exchange Table (Optional Feature)

This feature enhances the python currency converter by allowing users to view all currency values based on the selected currency.

def show_rates():
    selected = cb_view.get()
    txt_rates.delete("1.0", tk.END)

    for curr, value in rates.items():
        result = value / rates[selected]
        txt_rates.insert(tk.END, f"{selected} → {curr}   :   {result:.6f}\n")

✔ Explanation

This section:

  • Lets users choose a currency (e.g., USD, EUR)
  • Shows the value of that currency relative to all others
  • Prints the results in the text box

This makes the converter more than just a simple tool — it becomes a mini currency dashboard.


Part 4: Building the Tkinter User Interface (Dark Theme)

Tkinter is used to create all visual elements of the python currency converter, including:

  • Sidebar inputs
  • Currency dropdowns
  • Buttons
  • Results section
  • Full dark theme

Here are the main UI components:

root = tk.Tk()
root.title("Currency Converter")
root.geometry("800x500")
root.configure(bg="#1e1e1e")

style = ttk.Style()
style.theme_use("clam")
style.configure("TCombobox", fieldbackground="#3a3a3a",
                background="#3a3a3a", foreground="white")

✔ Explanation

These lines:

  • Initialize the main window
  • Set its size and title
  • Apply a modern dark theme
  • Customize ComboBoxes to match the interface colors

Sidebar: User Input & Buttons

entry_amount = tk.Entry(left_frame, bg="#3a3a3a", fg="white")
cb_from = ttk.Combobox(left_frame, values=currency_list)
cb_to = ttk.Combobox(left_frame, values=currency_list)
btn_convert = tk.Button(left_frame, text="Convert", command=convert_local)

What this part does:

  • Allows the user to type an amount
  • Select the source currency
  • Select the destination currency
  • Press the “Convert” button to calculate the result

Right Section: Viewing Exchange Tables

cb_view = ttk.Combobox(right_frame, values=currency_list)
btn_view = tk.Button(right_frame, text="Show Rates", command=show_rates)
txt_rates = tk.Text(right_frame, bg="#2b2b2b", fg="white")

This part enhances the python currency converter by offering a full exchange rate viewer.



Conclusion

This python currency converter project demonstrates how Python can be used to build practical, real-world applications. You learned how to:

  • Fetch live exchange rates
  • Process conversion formulas
  • Build a clean GUI with Tkinter
  • Structure a medium-sized Python project
  • Apply styling and user-friendly design

The project is beginner-friendly but still powerful enough for practical use, and it offers an excellent foundation for building more advanced finance-related applications.

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Related Posts:

Latest Posts:

Scroll to Top