PyQt is a Python binding of the cross-platform GUI toolkit Qt. Applications built with PyQt will run on any platform supported by Qt & Python including Windows, OS X, Linux, iOS and Android.

Created by Riverbank Computing, PyQt is free software (GPL licensed) and has been in development since 1999. PyQt5 was released in 2016 and last updated in October 2021.

For a complete guide to desktop application development with Python & PyQt, see the PyQt5 tutorial and my PyQt5 book Create Simple GUI Applications with Python & Qt.

Explore PyQt

Showing articles for All (274) PyQt6 (100) PySide6 (5) PyQt5 (83) Streamlit (0) Tkinter (0) PySide2 (3) Kivy (0)

PyQt6 Signals, Slots & Events

Triggering actions in response to user behaviors and GUI events

PySide6 Layouts

Use layouts to effortlessly position widgets within the window

Creating your first app with PyQt6

A simple Hello World! application with Python and Qt6

PyQt6 Widgets

Using QPushButton, QCheckBox, QComboBox, QLabel and QSlider widgets

Navigating QSqlTableModel and QTableView in very large databases

Working with large datasets in Qt's SQL table views, handling pagination, filtering, and record navigation

Problems with antivirus software and PyInstaller

Why antivirus tools flag PyInstaller executables and what you can do about it

Animations and Transformations With QtQuick in PyQt6

Building an animated analog clock in QML with rotations and spring animations

Animations and Transformations With QtQuick in PyQt5

Building an animated analog clock in QML with image rotations and spring animations

Avoid gray background for selected icons

Create a custom ToggleButton widget to replace QAction checkable icons without the default gray selection background

QSqlRelationalTableModel, QSortFilterProxyModel and QDataWidgetMapper

How to correctly combine relational models, proxy models, and data widget mappers in PyQt6

Combo Box delegate disappears with QSortFilterProxyModel applied

Why your QTableView delegate vanishes when you add a proxy model, and how to fix it

Multithreading PyQt6 applications with QThreadPool

Run background tasks concurrently without impacting your UI

First Steps With Qt Designer and PyQt6

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

Removing Gaps Between Custom Widgets in PyQt6 Layouts

Use size policies and size hints to control how custom-painted widgets fit together

How to Clear and Refresh ComboBox Delegate Data in QTableView

Keep your QTableView ComboBox delegates in sync when your underlying data changes

Displaying NumPy Arrays and Pandas Data in QTableView Cells

How to handle complex data like NumPy arrays and Pandas Series inside a QAbstractTableModel

How to Show Only Icons in QTableView Cells (Hide Text)

Use custom model roles to display icons without text in your PyQt5 tables

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

PyQt6 Book Now Available: Create GUI Applications with Python & Qt6

The hands-on guide to building desktop apps with Python and Qt6

Deploying PyQt6 Apps on macOS with py2app

How to package your PyQt6 application into a standalone macOS .app bundle

Packaging PyQt5 applications into a macOS app with PyInstaller

Turn your PyQt5 application into a distributable macOS .app bundle

Passing Arguments to Threaded Functions in PyQt6

Understanding the difference between passing a function and calling a function when using QThreadPool and QRunnable

Create Applications with QtQuick in PyQt6

Build modern applications with declarative QML
1 2 3 4 5 6 7 8 9 10 11