• Stars
    star
    963
  • Rank 47,492 (Top 1.0 %)
  • Language
    Python
  • License
    MIT License
  • Created over 9 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Provides an uniform layer to support PyQt5, PySide2, PyQt6, PySide6 with a single codebase

QtPy: Abstraction layer for PyQt5/PySide2/PyQt6/PySide6

license pypi version conda version download count OpenCollective Backers Join the chat at https://gitter.im/spyder-ide/public
PyPI status Github build status Coverage Status

Copyright © 2009–2022 The Spyder Development Team

Description

QtPy is a small abstraction layer that lets you write applications using a single API call to either PyQt or PySide.

It provides support for PyQt5, PyQt6, PySide6, PySide2 using the Qt5 layout (where the QtGui module has been split into QtGui and QtWidgets).

Basically, you can write your code as if you were using PyQt or PySide directly, but import Qt modules from qtpy instead of PyQt5, PySide2, PyQt6 or PySide6.

Accordingly, when porting code between different Qt bindings (PyQt vs PySide) or Qt versions (Qt5 vs Qt6), QtPy makes this much more painless, and allows you to easily and incrementally transition between them. QtPy handles incompatibilities and differences between bindings or Qt versions for you while keeping your project running, so you can focus more on your own code and less on keeping track of supporting every Qt version and binding. Furthermore, when you do want to upgrade or support new bindings, it allows you to update your project module by module rather than all at once. You can check out examples of this approach in projects using QtPy, like git-cola.

Attribution and acknowledgments

This project is based on the pyqode.qt project and the spyderlib.qt module from the Spyder project, and also includes contributions adapted from qt-helpers, developed as part of the glue project.

Unlike pyqode.qt this is not a namespace package, so it is not tied to a particular project or namespace.

License

This project is released under the MIT license.

Requirements

You need PyQt5, PySide2, PyQt6 or PySide6 installed in your system to make use of QtPy. If several of these packages are found, PyQt5 is used by default unless you set the QT_API environment variable.

QT_API can take the following values:

  • pyqt5 (to use PyQt5).
  • pyside2 (to use PySide2).
  • pyqt6 (to use PyQt6).
  • pyside6 (to use PySide6).

Module aliases and constants

  • QtCore.pyqtSignal, QtCore.pyqtSlot and QtCore.pyqtProperty (available on PyQt5/6) are instead exposed as QtCore.Signal, QtCore.Slot and QtCore.Property, respectively, following the Qt5 module layout.

  • The Qt version being used can be checked with QtCore.__version__ (instead of QtCore.QT_VERSION_STR) as well as from qtpy.QT_VERSION.

  • For PyQt6 enums, unscoped enum access was added by promoting the enums of the QtCore, QtGui, QtTest and QtWidgets modules.

  • Compatibility is added between the QtGui and QtOpenGL modules for the QOpenGL* classes.

  • To check the current binding version, you can use qtpy.PYSIDE_VERSION for PySide2/6 and qtpy.PYQT_VERSION for PyQt5/6. If the respective binding is not being used, the value of its attribute will be None.

  • To check the current selected binding, you can use qtpy.API_NAME

  • There are boolean values to check if Qt5/6, PyQt5/6 or PySide2/6 are being used: qtpy.QT5, qtpy.QT6, qtpy.PYQT5, qtpy.PYQT6, qtpy.PYSIDE2 and qtpy.PYSIDE6. True if currently being used, False otherwise.

Compat module

In the qtpy.compat module, you can find wrappers for QFileDialog static methods and SIP/Shiboken functions, such as:

  • QFileDialog.getExistingDirectory wrapped with qtpy.compat.getexistingdirectory

  • QFileDialog.getOpenFileName wrapped with qtpy.compat.getopenfilename

  • QFileDialog.getOpenFileNames wrapped with qtpy.compat.getopenfilenames

  • QFileDialog.getSaveFileName wrapped with qtpy.compat.getsavefilename

  • sip.isdeleted and shiboken.isValid wrapped with qtpy.compat.isalive

Installation

pip install qtpy

or

conda install qtpy

Type checker integration

A Command Line Interface (CLI) is offered to help with usage of QtPy. Presently, its only feature is to generate command line arguments for Mypy that will enable it to process the QtPy source files with the same API as QtPy itself would have selected.

If you run

qtpy mypy-args

QtPy will output a string of Mypy CLI args that will reflect the currently selected Qt API. For example, in an environment where PyQt5 is installed and selected (or the default fallback, if no binding can be found in the environment), this would output the following:

--always-true=PYQT5 --always-false=PYSIDE2 --always-false=PYQT6 --always-false=PYSIDE6

Using Bash or a similar shell, this can be injected into the Mypy command line invocation as follows:

mypy --package mypackage $(qtpy mypy-args)

For Pyright support and other usage notes, see this comment.

Contributing

Everyone is welcome to contribute!

Sponsors

QtPy is funded thanks to the generous support of

QuansightNumfocus

and the donations we have received from our users around the world through Open Collective:

Sponsors

More Repositories

1

spyder

Official repository for Spyder - The Scientific Python Development Environment
Python
8,261
star
2

qtawesome

Iconic fonts in PyQt and PySide applications
Python
786
star
3

spyder-notebook

Jupyter notebook integration with Spyder
Python
520
star
4

spyder-terminal

Run system terminals inside Spyder. Works on Linux, macOS and Windows.
Python
228
star
5

qtsass

Compile SASS files to Qt stylesheets
Python
130
star
6

spyder-vim

A plugin for Spyder to enable Vim keybindings
Python
125
star
7

spyder-unittest

A plugin for Spyder to run tests and view the results
Python
79
star
8

spyder-reports

Spyder plugin to render Markdown reports using Pweave as a backend
Python
70
star
9

loghub

Changelog generator based on github milestones or tags.
Python
41
star
10

spyder-kernels

Jupyter Kernels for the Spyder console
Python
38
star
11

spyder-autopep8

A plugin to run the autopep8 python linter from within the spyder editor.
Python
35
star
12

spyder-docs

Documentation for Spyder, the Scientific Python Development Environment
Python
33
star
13

spyder-line-profiler

This is a plugin to run the python line profiler from within the spyder editor.
Python
33
star
14

docrepr

Generate rich representations for docstrings
Python
26
star
15

website-spyder

Spyder IDE website sources. Built with Lektor.
JavaScript
23
star
16

conda-manager

Graphical conda package manager
Python
22
star
17

spyder-memory-profiler

This is a plugin to run the python memory_profiler from within the spyder editor.
Python
12
star
18

pysyntect

Python bindings for Syntect library
Rust
9
star
19

lektor-icon

A modern, single-page-focused theme for the Lektor static CMS
CSS
8
star
20

binder-environments

Binder environments to test pull requests in our organization
Python
8
star
21

spyder-vcs

Python
8
star
22

spyder-plugin-cookiecutter

Cookiecutter template for a Spyder IDE plugin (compatible with Spyder IDE versions 3.x and 4.x)
Python
7
star
23

mac-application

Instructions to build the native Spyder MacOS X application
Shell
7
star
24

three-merge

Simple Python library to perform a 3-way merge between strings
Python
7
star
25

langchain-provider

Completion provider using Langchain and OpenAI for Spyder 6+
Python
5
star
26

website-production

Spyder IDE deployed website.
HTML
5
star
27

Spyder-Workshop

Spyder Workshop
Python
5
star
28

plugin-examples

Plugin examples for the new Spyder 5 API
Python
5
star
29

gettext-helpers

Helper functions and scripts for gettext translation in Python
Python
4
star
30

envs-manager

A manager for Python environments and packages managers
Python
4
star
31

ux-improvements

Discussion about UX improvements for Spyder 5 and beyond
4
star
32

community

Community repository for Spyder IDE
3
star
33

governance-and-guidelines

Governance documents and formal guidelines for the Spyder project as a whole
3
star
34

spyder-remote-services

Python
3
star
35

spyder-website

The new Spyder website, built with Svelte
Svelte
2
star
36

spyder-env-manager

A plugin for Spyder 6+ to manage Python virtual environments and packages
Python
2
star
37

action-close-duplicate-issues

Github action to close duplicate issues with a custom message
TypeScript
1
star
38

spyder5-plugin-cookiecutter

Cookiecutter for a Spyder 5 plugin
Python
1
star