Qt for Python & Briefcase#
Briefcase is a packaging tool that lets you create a standalone package for a Python application. It supports the following installer formats:
.app application bundle for macOS
MSI installer for Windows
AppImage for Linux
For more details, see the official documentation.
Status of Qt 6 Support#
As of March 2021, Qt 6 is not supported yet.
Install Briefcase using the following pip command:
pip install briefcase
You also need : docker on linux, WixToolset on windows,
If you’re using a virtual environment, remember to activate it before installing Briefcase.
After installation, the briefcase binary is located in your virtual environment’s bin/ directory, or where your Python executable is located.
You can either create a brand new project using the briefcase assistant or setup your own.
Use Briefcase Assistant#
Run the following command and answer the questions to get started:
Ensure that PySide6 is chosen as the GUI toolkit choice. Your PySide6 application is now configured. You can jump to Build the package.
Set up your project#
Create a pyproject.toml#
At the root level of your project, create a pyproject.toml file:
[tool.briefcase] project_name = "MyPySideApp" bundle = "com.example" version = "0.0.1" url = "https://somwhere/on/the/net" license = "GNU General Public License v3 (GPLv3)" author = 'MyName Firstname' author_email = "email@example.com" [tool.briefcase.app.mypysideapp] formal_name = "A Cool App" description = "The coolest app ever" icon = "src/mypysideapp/resources/appicon" # Briecase will choose the right extension depending the os (png,ico,...) sources = ['src/mypysideapp'] requires = ['pyside6==6.0.0', 'pony>=0.7.11,<0.8', 'dickens==1.0.1', 'Pillow==7.1.2', 'mako==1.1.2', 'beautifulsoup4'] [tool.briefcase.app.mypysideapp.macOS] requires =  [tool.briefcase.app.mypysideapp.linux] requires =  system_requires =  [tool.briefcase.app.mypysideapp.windows] requires = 
Write some code#
Let’s say your project tree is like this:
pyproject.toml setup.cfg pytest.ini src/ mypysideapp/ resources/ appicon.png appicon.ico __init__.py __main__.py app.py
Content of __main__.py:
import sys from PySide6.QtWidgets import QApplication from mypysideapp.app import MyWidget if __name__ == "__main__": app = QApplication(sys.argv) widget = MyWidget() widget.resize(800, 600) widget.show() sys.exit(app.exec())
Content of app.py:
import random from PySide6.QtWidgets import (QLabel, QPushButton, QVBoxLayout, QWidget) from PySide6.QtCore import Slot, Qt class MyWidget(QWidget): def __init__(self): QWidget.__init__(self) self.hello = ["Hallo Welt", "你好，世界", "Hei maailma", "Hola Mundo", "Привет мир"] self.button = QPushButton("Click me!") self.text = QLabel("Hello World") self.text.setAlignment(Qt.AlignCenter) self.layout = QVBoxLayout() self.layout.addWidget(self.text) self.layout.addWidget(self.button) self.setLayout(self.layout) # Connecting the signal self.button.clicked.connect(self.magic) @Slot() def magic(self): self.text.setText(random.choice(self.hello))
Build the package#
Initialize the package#
Run the following command to initialize the building the packages for Windows, Linux, and macOS. It creates a subdirectory each for the different platforms. This step takes longer as it adds the packages listed in requires sections in the pyproject.toml file.
Build the application#
macOS/A Cool App/A Cool App.app or linux/A Cool App-x86_64-0.0.1.AppImage or windows\A Cool App
Run the application#
You can run your project in dev mode (your source code not packaged) with briefcase dev
Build the installer (only Windows and macOS)#
briefcase package --no-sign
It’s possible to sign, see the documentation. You get macOS/A Cool App-0.0.1.dmg
You get windowsA_Cool_App-0.0.1.msi