入门指南

在这里,您可以找到使用Qt提供的两种技术:Qt Widgets和Qt Quick来安装和创建简单应用程序的步骤。

注意

如果你是Qt的新手,你可以查看本页末尾的常见问题部分,以了解概念、文件类型、兼容的IDE等。如果你拥有Qt许可证,请参考商业用途

需求

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

  • Official Python 3.8+

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

安装

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

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

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

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

      env\Scripts\activate.bat
      

    查看此动画以了解如何操作:

    PySide6 Installation GIF

    注意

    如果通过 pip install 安装 PySide6,系统中安装的 Qt 不会干扰您的 PySide6 安装,因为 Python 包(wheels)已经包含了 Qt 二进制文件。最重要的是,系统中的样式插件不会对 PySide 应用程序产生任何影响。

  • 安装 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
      
  • 测试你的安装

    现在你已经安装了 Qt for Python,通过运行以下 Python 代码来打印版本信息以测试你的设置:

    import PySide6.QtCore
    
    # 打印 PySide6 版本
    print(PySide6.__version__)
    
    # 打印用于编译 PySide6 的 Qt 版本
    print(PySide6.QtCore.__version__)
    

    注意

    有关 pyside6 包中包含的更多信息,请查看 Package Details

创建你的第一个Qt应用程序

Qt Widgets and Qt Quick comparison header animation

Qt 提供了两种技术来构建用户界面:

  • Qt Widgets,一种自Qt诞生以来就存在的命令式编程和设计方法,使其成为UI应用程序的稳定可靠技术。

  • Qt Quick,一种声明式编程和设计方法,使您能够通过描述简单元素来创建流畅的用户界面。

这两种技术都提供了使用拖放工具来创建界面的可能性。pyside6-designer用于Qt Widgets(安装pyside6时包含),以及Qt Design Studio用于Qt Quick(在这里获取)。

注意

阅读完本页后,建议您查看 pyside6-project 工具,以了解如何自动创建项目 而无需手动编写所有代码。

使用Qt Widgets创建您的第一个Qt应用程序

您的 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 并包含一个 QPushButton 和一个 QLabel

    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 函数会被调用。

  • 应用程序执行

    现在,添加一个主函数,在其中实例化 MyWidgetshow 它:

    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 in Qt Widgets

使用Qt Quick创建您的第一个Qt应用程序

使用 Qt Quick 做同样的事情:

  • 导入

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

    import sys
    from PySide6.QtGui import QGuiApplication
    from PySide6.QtQml import QQmlApplicationEngine
    
  • Declarative UI

    The UI can be described in the QML language:

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

    Put the this into a file named Main.qml into a directory named Example along with a file named qmldir to describe a basic QML module:

    module Example
    Main 254.0 Main.qml
    
  • 应用程序执行

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

    import sys
    from PySide6.QtGui import QGuiApplication
    from PySide6.QtQml import QQmlApplicationEngine
    
    if __name__ == "__main__":
        app = QGuiApplication(sys.argv)
        engine = QQmlApplicationEngine()
        engine.addImportPath(sys.path[0])
        engine.loadFromModule("Example", "Main")
        if not engine.rootObjects():
            sys.exit(-1)
        exit_code = app.exec()
        del engine
        sys.exit(exit_code)
    

    通过编写以下命令来运行你的示例:

    python main.py
    

    尝试点击底部的按钮,看看你会得到什么样的问候。

    Hello World application in Qt Quick

下一步

既然你已经使用了这两种技术,你可以前往我们的 示例教程 部分。

常见问题

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

What is Qt

Qt, QML, Widgets… 有什么区别?

Qt, QML, Widgets…有什么区别?
Compatible IDEs

哪些IDE与PySide兼容?

哪些IDE兼容?
Binding Generation

什么是Shiboken?

绑定生成:什么是Shiboken?
File types

PySide中的文件类型

文件类型
App distribution

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

将您的应用程序分发到其他系统/平台
Why Qt for Python?

作为一名Qt/C++开发者,为什么我应该考虑使用Qt for Python?

为什么选择Qt for Python?