Skip to content

3. Python GUI

Creating graphical user interfaces (GUIs) in Python can be done using various libraries. One of the most popular and easy-to-use libraries is Tkinter, which comes built-in with Python. Below is a tutorial on how to create simple Python GUI applications using Tkinter.

1. Setting up Tkinter

Tkinter is included with Python, so you don’t need to install anything extra.

import tkinter as tk

2. Basic Window Creation

To start, you need to create a root window, which is the main window of your application.

import tkinter as tk
# Create the root window
root = tk.Tk()
# Set the title of the window
root.title("My First GUI")
# Set the window size (width x height)
root.geometry("400x300")
# Start the main loop
root.mainloop()

3. Adding Widgets

Widgets are the building blocks of a Tkinter application. Some common widgets include labels, buttons, and text input fields.

Label

A label is used to display static text.

label = tk.Label(root, text="Hello, World!")
label.pack() # This makes the label appear in the window

Button

A button can perform actions when clicked. To make it functional, you need to bind it to a function.

def say_hello():
print("Hello!")
button = tk.Button(root, text="Click Me", command=say_hello)
button.pack()

Entry (Text Input)

An entry widget allows the user to input text.

entry = tk.Entry(root)
entry.pack()

Combining Widgets

You can combine different widgets in one window.

import tkinter as tk
def display_text():
label.config(text="Hello, " + entry.get())
root = tk.Tk()
root.title("Simple GUI")
root.geometry("300x200")
label = tk.Label(root, text="Enter your name:")
label.pack()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="Submit", command=display_text)
button.pack()
root.mainloop()

4. Layout Management

Tkinter provides several ways to organize your widgets:

  • pack(): Stacks widgets vertically or horizontally.
  • grid(): Organizes widgets in a table-like structure.
  • place(): Places widgets at specific positions within the window.

Example Using grid()

root = tk.Tk()
root.geometry("200x100")
tk.Label(root, text="First Name").grid(row=0)
tk.Label(root, text="Last Name").grid(row=1)
tk.Entry(root).grid(row=0, column=1)
tk.Entry(root).grid(row=1, column=1)
root.mainloop()

5. Events and Bindings

Tkinter can handle user interactions through event bindings. For example, you can bind a keyboard key press or mouse click to a function.

Binding a Key Press

def on_key(event):
print(f"Key {event.char} pressed")
root.bind("<Key>", on_key)

Binding Mouse Clicks:

def on_click(event):
print(f"Mouse clicked at {event.x}, {event.y}")
root.bind("<Button-1>", on_click) # Left mouse button

6. Message Box

You can display pop-up dialogs such as message boxes to show information or warnings.

from tkinter import messagebox
def show_message():
messagebox.showinfo("Message", "Hello, World!")
button = tk.Button(root, text="Show Message", command=show_message)
button.pack()

7. Menus

Adding menus to your window is simple with Tkinter.

def on_new():
print("New file created")
menu = tk.Menu(root)
root.config(menu=menu)
file_menu = tk.Menu(menu)
menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New", command=on_new)
file_menu.add_command(label="Exit", command=root.quit)

8. Canvas (Drawing Shapes)

The Canvas widget is used to draw shapes, lines, and images.

canvas = tk.Canvas(root, width=200, height=200)
canvas.pack()
# Draw a rectangle
canvas.create_rectangle(50, 50, 150, 150, fill="blue")
# Draw a line
canvas.create_line(0, 0, 200, 200, fill="red")

9. Combining All Concepts in a Simple App

Here’s a simple app that combines all the above concepts.

import tkinter as tk
from tkinter import messagebox
def greet_user():
name = entry.get()
if name:
messagebox.showinfo("Greeting", f"Hello, {name}!")
else:
messagebox.showwarning("Warning", "Please enter your name.")
# Create the root window
root = tk.Tk()
root.title("Greeting App")
root.geometry("300x150")
# Add a label
label = tk.Label(root, text="Enter your name:")
label.pack(pady=10)
# Add an entry widget
entry = tk.Entry(root)
entry.pack(pady=5)
# Add a button to trigger greeting
button = tk.Button(root, text="Greet Me", command=greet_user)
button.pack(pady=10)
# Start the main loop
root.mainloop()

10. More Advanced Libraries for GUI Development

If you want more advanced GUIs, you can explore other libraries:

  1. PyQt or PySide: More feature-rich and complex than Tkinter.

  2. Kivy: A modern GUI library designed for touch interfaces.

  3. wxPython: Another popular cross-platform GUI library.