The complete PySide2 & PySide6 tutorial — Create GUI applications with Python

The easy way to create desktop applications

Create Desktop GUI Applications with PySide

Take your first steps building GUIs with Python, using the official Qt PySide library. This learning track starts from scratch, assuming no prior knowledge of GUI concepts. We'll introduce these concepts step by step, using hands-on examples.

Includes code for both PySide2 and PySide6.

Looking for PyQt5 or PyQt6? Go to the PyQt tutorial.

This track includes 23 tutorials.

Getting started with PySide

Take your first steps building Python & Qt5 apps with PySide

Like writing any code, building PySide applications is all about approaching it in the right way. In the first part of the course we cover the fundamentals necessary to get you building Python GUIs as quickly as possible. By the end of the first part you'll have a running QApplication which we can then customize.

Creating your first app with PySide

A simple Hello World! application with Python and Qt

Signals, Slots & Events

Triggering actions in response to user behaviors and GUI events


Using PySide's built-in widgets to build your applications

Layout management

Use layouts to effortlessly position widgets within the window

Actions — Toolbars & Menus

Defining toolbars, menus and keyboard shortcuts with QAction

Dialogs and Alerts

Notify your users and ask for their input

Creating additional windows

Opening new windows for your application

Start now

Creating applications with Qt Designer

Using the drag-drop designer to develop your PySide apps

As your applications get larger or interfaces become more complicated, it can get a bit cumbersome to define all elements programmatically. The good news is that Qt comes with a graphical editor Qt Designer (or Qt Creator) which contains a drag-and-drop UI editor — Qt Designer. In this PySide tutorial we'll cover the basics of creating Python GUIs with Qt Designer.

First steps with Qt Designer

Use Qt Designer's drag and drop interface to design your GUI

The QResource System

Using the QResource system to package additional data with your applications

Start now

Extended UI features

Extending your PySide apps with complex GUI behaviour

In this PySide tutorial we'll cover some advanced features of Qt that you can use to improve your Python GUIs.

Transmitting extra data with Qt Signals

Modifying widget signals to pass contextual information to slots

System tray & Mac menu bar applications

Add quick access functions to your apps

Start now

Threads & Processes

Run concurrent tasks without impacting your PySide UI

As your applications become more complex you may finding yourself wanting to perform long-running tasks, such as interacting with remote APIs or performing complex calculations. By default any code you write exists in the same thread and process, meaning your long-running code can actually block Qt execution and cause your Python GUI app to "hang". In this PySide tutorial we'll cover how to avoid this happening and keep your applications running smoothly, no matter the workload.

Multithreading PySide applications with QThreadPool

Run background tasks concurrently without impacting your UI

Using QProcess to run external programs

Run background programs without impacting your UI

Start now

ModelViews and Databases

Connecting your PySide application to data sources

All but the simplest of apps will usually need to interact with some kind of external data store — whether that's a database, a remote API or simple configuration data. The Qt ModelView architecture simplifies the linking and updating your UI with data in custom formats or from external sources. In this PySide tutorial we'll discover how you can use Qt ModelViews to build high performance Python GUIs.

The ModelView Architecture

Qt's MVC-like interface for displaying data in views

Displaying tabular data in Qt ModelViews

Create customized table views with conditional formatting, numpy and pandas data sources.

Start now

Graphics and Plotting

Vector graphics and plotting using PyQtGraph in PySide

In addition to the simple bitmap graphics already covered, Qt provides API for vector graphics. Vector graphics can be used to build complex and interactive interfaces beyond the normal widget interface. They can also be used for plotting nice graphs with PyQtGraph. In this PySide tutorial we'll introduce vector graphics and have a look at plotting data with PyQtGraph.

Plotting with PyQtGraph

Create custom plots in PySide with PyQtGraph

Plotting with Matplotlib

Create PySide plots with the popular Python plotting library

Start now

Custom Widgets

Designing your own custom widgets in PySide

Widgets in Qt are built on bitmap graphics — drawing pixels on a rectangular canvas to construct the "widget". To be able to create your own custom widgets you first need to understand how the QPainter system works and what you can do with it. In this PySide tutorial we'll go from basic bitmap graphics to our own entirely custom widget.

QPainter and Bitmap Graphics

Introduction to the core features of QPainter

Creating custom GUI widgets in PySide

Build a completely functional custom widget from scratch using QPainter

Animating custom widgets with QPropertyAnimation

Add dynamic visual effects to your custom widgets

Start now

Packaging and distribution

Sharing your PySide applications with other people

There comes a point in any app's development where it needs to leave home — half the fun in writing software is being able to share it with other people. Packaging Python GUI apps can be a little tricky, but in this PySide tutorial we'll cover how to package up your apps to share, whether commercially or just for fun.

Packaging PySide2 applications for Windows, with PyInstaller

Turn your Qt5 application into a distributable installer for Windows

Packaging PySide apps with fbs

Distribute cross-platform GUI applications with the fman Build System

Start now

QtQuick & QML

Building modern PySide GUIs with QtQuick & QML

Qt Quick is Qt's declarative UI design system, using the Qt Modeling Language (QML) to define custom user interfaces. Originally developed for use in mobile applications, it offers dynamic graphical elements and fluid transitions and effects allowing you to replicate the kinds of UIs you find on mobile devices. Qt Quick is supported on all desktop platforms too and is a great choice for building desktop widgets or other interactive tools. Qt Quick is also a great choice for developing UIs for hardware and microcontrollers.

Create applications with QtQuick

Build modern applications with declarative QML

Start now