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

Are there any built-in QIcons?

Using built-in icons for your apps.

Understanding QPainter Coordinates in PyQt6

How the coordinate system works for drawing on canvases in PyQt6

Creating PySide6 UI without .ui / Qt Designer

Build your entire GUI in pure Python code, no .ui files required

Adding QTabWidget to a Layout Alongside Other Widgets in PyQt6

How to combine QTabWidget with other layouts without it taking over your entire window

Handling Image Drag and Drop from Web Browsers in PyQt6

Why toLocalFile() returns an empty string and how to handle remote image drops correctly

Constantly Print Subprocess Output While Process is Running

How to stream live output from a subprocess into your PyQt6 GUI without freezing the interface