Qt for Python & Briefcase#

Briefcase 是一个打包工具,允许您为 Python 应用程序创建独立的打包。它支持以下安装程序格式

  • macOS 的 .app 应用程序包

  • Windows 的 MSI 安装程序

  • Linux 的 AppImage

有关更多详细信息,请参阅 官方文档

Qt 6 支持

截至 2021 年 3 月,Qt 6 尚不支持。

准备

使用以下 pip 命令安装 Briefcase

pip install briefcase

您还需要:Linux 上的 docker,Windows 上的 WixToolset

如果您正在使用虚拟环境,请记住在安装 Briefcase 之前激活它。

安装完成后,briefcase 二进制文件位于您的虚拟环境 bin/ 目录中,或与您的 Python 可执行文件所在的目录相同。

您可以使用 briefcase 助手创建一个全新的项目,或者设置自己的项目。

使用 Briefcase 助手

运行以下命令并回答问题以开始操作

briefcase new

确保选择 GUI 工具包选择 为 PySide6。您的 PySide6 应用程序现在已经配置好了。您可以跳转到 构建包

设置您的项目

创建 pyproject.toml

在您的项目根目录中创建一个 pyproject.toml 文件

[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 protected]"

[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 = []

编写一些代码

假设您的项目结构如下

pyproject.toml
setup.cfg
pytest.ini
src/

    mypysideapp/
        resources/
            appicon.png
            appicon.ico
        __init__.py
        __main__.py
        app.py

__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())

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))

构建包

初始化包

只需运行

briefcase create

运行以下命令来初始化为 Windows、Linux 和 macOS 构建包。它为不同平台创建了一个子目录。此步骤会花费更长的时间,因为它在 pyproject.toml 文件的 requires 节中添加了包。

构建应用
briefcase build

您将获得

macOS/A Cool App/A Cool App.app
or
linux/A Cool App-x86_64-0.0.1.AppImage
or
windows\A Cool App

运行应用
briefcase run

注意

您可以使用 briefcase devdev 模式下运行您的项目(源代码未打包)

搭建安装包(仅限 Windows 和 macOS)#

macOS

briefcase package --no-sign

可以在文档中找到签名方法,请参考文档。您将得到macOS/A Cool App-0.0.1.dmg

Windows

briefcase package

您将得到 windows\A_Cool_App-0.0.1.msi