PyQt6 is a Python binding of the cross-platform GUI toolkit Qt. Applications built with PyQt6 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. The latest version PyQt6 was released in 2021 and the library continues to be updated.

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

Explore PyQt6

PyQt6

PyQt6 Toolbars & Menus — QAction

Defining toolbars, menus, and keyboard shortcuts with QAction

PyQt6 Dialogs and Alerts

Notify your users and ask for their input

PyQt6 Layouts

Use layouts to effortlessly position widgets within the window

PyQt6 Signals, Slots & Events

Triggering actions in response to user behaviors and GUI events

Creating your first app with PyQt6

A simple Hello World! application with Python and Qt6

Install PyQt6 on Ubuntu Linux

Install PyQt6 on Ubuntu and other Debian-based Linux distributions

Install PyQt6 on macOS

Step-by-step guide to installing PyQt6 on macOS for Python GUI development

QWidget::setLayout: Attempting to set QLayout on a widget which already has a layout

Understanding why calling setLayout() twice causes an error, and how to structure your layouts correctly

Fixing inotify_add_watch errors when deleting files with QFileSystemModel

Why Qt's file watcher complains about deleted directories and how to handle it

AttributeError type object 'Qt' has no attribute 'Alignment'

Understanding enum naming changes in PyQt6.1 and how to fix alignment flags

Why selectRow After insertRow Doesn't Work in PyQt6

Understanding how to properly insert rows in a QAbstractTableModel and select them in a QTableView

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

Monitoring a Running Background Process from a PyQt6 Application

How to connect your GUI to an external program that's already running

Display Data with Different Column Sizes in a QAbstractTableModel

How to handle jagged or uneven row lengths when displaying file data in a QTableView

Animations and Transformations With QtQuick in PyQt6

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

Constantly Print Subprocess Output While Process is Running

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

Waiting for Multiple Threads to Complete Before Starting Another in Qt

How to coordinate dependent background tasks using QThreadPool and signals

Packaging PySide6 and PyQt6 Apps with PyInstaller

Solving the missing Qt platform plugin error when building executables

Creating Grouped and Stacked Bar Charts with PyQtGraph

Build professional grouped and stacked bar charts in your PyQt6 applications using pyqtgraph's BarGraphItem

QSqlRelationalTableModel, QSortFilterProxyModel and QDataWidgetMapper

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

Managing Multiple QRunnables with a Launcher QRunnable in PyQt6

How to coordinate parallel tasks and add stop functionality using QThreadPool

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
1 2 3 4 5 6 7 8 9