Python GUI Tutorials

Want to create GUI applications with Python? Here is everything you need to go from your first window to complete apps.

Stop wasting your time on half-baked examples and bad practises. Learn how to build Python applications the right way.

What do you want to do?

Build Professional Desktop Apps with Python I recommend PyQt6 or PySide6 — with PySide being more popular for commercial software due to simpler licensing. Get Started with PySide6

Build Data Science Dashboards with Python If you want to build web-based dashboards, Streamlit is the current most capable and best supported option. Get Started with Streamlit

Learn Python GUI Basics While others recommend Tkinter because it's bundled with Python, I suggest getting started with PyQt6. It isn't any more complex, has better tutorials and is far more capable. Get Started with PyQt6

Python GUI Libraries

Other libraries are available

There are multiple Python GUI libraries available for Python. If you're not sure which GUI library to use for your project see Which Python GUI Library?, our comprehensive guide. We have complete tutorials for many Python UI libraries.

Books

Hands-on guides to Python GUI programming

Books taking you from first principles to fully-functional apps, not toy examples.

See all Python GUIs books

Latest Updates

Adding QComboBox to a QTableView and getting/setting values after creation

Use QItemDelegate to embed combo boxes in your table views, with per-row data and value tracking

How to Add Custom Widgets to Qt Designer

Use widget promotion to integrate your own Python widgets into Qt Designer layouts

Sorting and Filtering a QTableView with QSortFilterProxyModel

Learn how to add interactive sorting and filtering to your PyQt/PySide table views without touching your underlying data

Streamlit Buttons

Making things happen with Streamlit buttons

Actions in one thread changing data in another

How to communicate between threads and windows in PyQt6

Streamlit Widgets

An Overview of Commonly Used Widgets in Streamlit