快速入门#

新接触 Qt?请查看本页末尾的常见问题解答部分。如果您拥有 Qt 许可证,请参阅本页末尾关于《商业使用》的相关信息。

注意

如果在您的系统中通过执行 pip install 安装 Qt,则安装 Qt 不会干扰 PySide6 的安装,因为 Python 包(轮)已包含 Qt 二进制文件。值得注意的是,系统样式插件将对 PySide 应用程序没有任何影响。

需求#

在您安装 Python for Qt 之前,您必须首先安装以下软件

  • Python 3.7+,

  • 我们强烈建议您使用虚拟环境,例如 venvvirtualenv,并避免通过 pip 在您的系统中安装 PySide6。

注意

对于 Windows 用户,请使用来自 https://pythonlang.cn/downloads/ 的解释器,而不是来自 Microsoft Store 的解释器。

安装#

注意

有关商业安装,请参阅 商业使用

  • 创建和激活环境 您可以通过在终端上运行以下命令来完成此操作

    • 创建环境(您的 Python 可执行文件可能被称为 python3

      python -m venv env
      
    • 激活环境(Linux 和 macOS)

      source env/bin/activate
      
    • 激活环境(Windows)

      env\Scripts\activate.bat
      

    查看此动画,了解如何操作

    Installation GIF
  • 安装 PySide6

    现在您可以使用 pip 安装 Qt for Python 软件包。在终端中运行以下命令

    • 对于最新版本

      pip install pyside6
      
    • 对于特定版本,例如 6.4.1

      pip install pyside6==6.4.1
      
    • 您还可以从我们的服务器安装特定的快照。要这样做,您可以使用以下命令

      pip install --index-url=https://download.qt.io/snapshots/ci/pyside/6.4/latest pyside6 --trusted-host download.qt.io
      

    注意

    从 6.4.3 版本开始,PySide6 可以在 conda 环境内部使用,但您对 qt.conf 文件的任何手动更改将被忽略。如果您想为 Qt 配置设置自定义值,请将这些值设置为 qt6.conf 文件中。有关 qt.conf 的更多信息

  • 测试您的安装

    现在您已安装了 Python for Qt,可以通过运行以下 Python 结构来测试您的设置并打印版本信息

    import PySide6.QtCore
    
    # Prints PySide6 version
    print(PySide6.__version__)
    
    # Prints the Qt version used to compile PySide6
    print(PySide6.QtCore.__version__)
    

注意

有关包含在 pyside6 包中的信息的更多信息,请查看包详细信息

创建一个简单的 Qt Widgets 应用程序#

您的 Qt for Python 安装已就绪。您可以通过开发一个简单应用程序来进一步探索它,该应用程序用几种不同的语言打印 "Hello World"。以下指令将引导您完成开发过程。

  • 导入

    创建一个名为 hello_world.py 的新文件,并向其中添加以下导入。

    import sys
    import random
    from PySide6 import QtCore, QtWidgets, QtGui
    

    PySide6 Python 模块作为其子模块提供对 Qt API 的访问。在本例中,您正在导入 QtCoreQtWidgetsQtGui 子模块。

  • 主类

    定义一个名为 MyWidget 的类,它扩展 QWidget 并包含一个 QPushButtonQLabel

    class MyWidget(QtWidgets.QWidget):
        def __init__(self):
            super().__init__()
    
            self.hello = ["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"]
    
            self.button = QtWidgets.QPushButton("Click me!")
            self.text = QtWidgets.QLabel("Hello World",
                                         alignment=QtCore.Qt.AlignCenter)
    
            self.layout = QtWidgets.QVBoxLayout(self)
            self.layout.addWidget(self.text)
            self.layout.addWidget(self.button)
    
            self.button.clicked.connect(self.magic)
    
        @QtCore.Slot()
        def magic(self):
            self.text.setText(random.choice(self.hello))
    

    MyWidget 类具有 magic 成员函数,它从 hello 列表中随机选择一个项。当您单击按钮时,会调用 magic 函数。

  • 应用程序执行

    现在,添加一个主函数,在其中实例化 MyWidget 并显示它。

    if __name__ == "__main__":
        app = QtWidgets.QApplication([])
    
        widget = MyWidget()
        widget.resize(800, 600)
        widget.show()
    
        sys.exit(app.exec())
    

    通过编写以下命令运行您的示例:python hello_world.py

    尝试单击底部的按钮以查看您获得的问候语。

    Hello World application

创建一个简单的 Quick 应用程序#

使用 Qt Quick 执行相同的操作

  • 导入

    创建一个名为 hello_world_quick.py 的新文件,并向其中添加以下导入。

    import sys
    from PySide6.QtGui import QGuiApplication
    from PySide6.QtQml import QQmlApplicationEngine
    
  • 声明性 UI

    UI 可以使用 QML 语言来描述(分配给 Python 变量)

    QML = """
    import QtQuick
    import QtQuick.Controls
    import QtQuick.Layouts
    
    Window {
        width: 300
        height: 200
        visible: true
        title: "Hello World"
    
        readonly property list<string> texts: ["Hallo Welt", "Hei maailma",
                                               "Hola Mundo", "Привет мир"]
    
        function setText() {
            var i = Math.round(Math.random() * 3)
            text.text = texts[i]
        }
    
        ColumnLayout {
            anchors.fill:  parent
    
            Text {
                id: text
                text: "Hello World"
                Layout.alignment: Qt.AlignHCenter
            }
            Button {
                text: "Click me"
                Layout.alignment: Qt.AlignHCenter
                onClicked:  setText()
            }
        }
    }
    """
    

    注意

    请注意,理想情况下,此内容应放入 qml 文件中,但为了简单起见,我们正在使用字符串变量。

  • 应用程序执行

    现在,在主函数中实例化一个 QQmlApplicationEngine 并加载 QML

    if __name__ == "__main__":
        app = QGuiApplication(sys.argv)
        engine = QQmlApplicationEngine()
        engine.loadData(QML.encode('utf-8'))
        if not engine.rootObjects():
            sys.exit(-1)
        exit_code = app.exec()
        del engine
        sys.exit(exit_code)
    

    注意

    这是一个简化的示例。通常,QML 代码应位于单独的 .qml 文件中,可以使用设计工具进行编辑。

常见问题#

在此可以找到一些常见问题和情况,这些问题和情况可以澄清您在开始编程之前的问题。

什么是 Qt

Qt,QML,Widgets…它们之间的区别是什么?

兼容的 IDE

哪些 IDE 与 PySide 兼容?

绑定生成

Shiboken 是什么?

文件类型

PySide 中的文件类型

应用程序分发

将应用程序分发到其他系统和平台

为什么选择 Python for Qt?

作为一个 Qt/C++ 开发人员,为什么我应该考虑 Qt for Python?