为什么选择 Qt for Python?#

../_images/tiobe.png
TIOBE index for Python

来自tiobe.com/tiobe-index/python的截图,日期:2021.09.06

要回答这个问题,我们需要回顾一下,简单聊聊有关语言的话题。

Python 的历史与 Qt 相当悠久,同样,它也在不断成长,转变成为许多编程领域最常用、最受欢迎、最受需求的语言。

目前(2021年),很少会遇到对机器学习和人工智能一无所知的人。同样,当我们提到数据科学/分析/工程时,我们知道这很可能与 Python 有关。

我们可以通过一些公共调查来验证这一说法,这些调查展示了 Python 语言的演变和偏好,比如往年 StackOverflow 的调查。

2019

2020

2021

最受欢迎的语言

第二名

第三名

第六名

最希望掌握的语言

第一名

第一名

第一名

以及TIOBE 指数(如图右侧所示)。

当然,这些来源可能不足以全面评价该语言,但它们确实突显了全球开发者中的一股趋势。

降低 Qt 语言学习门槛#

经验丰富的 C++ 开发者在设计 Qt 应用程序或理解用 Qt 编码的其他代码库时不会有任何困难。此外,许多团队是多学科的,项目的其他开发人员可能不会精通 C++。

Python 正在吸引着更多_people_进入编程,同样的原因,即使背景不同的人也能编写代码,这意味着不同的团队可以“说同样的语言”。

在 Python 中创建 Qt 应用程序仅需要几行代码,运行它不需要过多的配置。作为一个例子,让我们看看一个简单的hello world应用程序的代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT
    public:
        MainWindow(QWidget *parent = nullptr);
    private slots:
        void handleButton();
    private:
        QPushButton *m_button;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent)
{
    m_button = new QPushButton("My Button", this);
    connect(m_button, SIGNAL(clicked()), this,
            SLOT(handleButton()));
}

void MainWindow::handleButton()
{
    m_button->setText("Ready");
}
#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWindow;
    mainWindow.show();
    return app.exec(d);
}
import sys
from pyside6.QtWidgets import (QApplication, QMainWindow,
                               QPushButton)

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.button = QPushButton("My Button", self)
        self.button.clicked.connect(self.handleButton)

    def handleButton(self):
        self.button.setText("Ready")

if __name__ == "__main__":
    app = QApplication([])
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec())

可以说,大多数样板代码是由许多好的 IDE 提供的,如 QtCreator,但使用外部工具确实需要一些练习才能熟悉。

团结创造力量#

在我们的使命中,让更多开发者进入 Qt 世界,重要的是要指出,这并不意味着 C++ 开发者被遗忘。

Qt for Python 一起绑定提供我们的绑定生成器 Shiboken(见绑定生成:Shiboken是什么?),它已经通过ERROR{-}事件上的很多演讲展示了其功能。

在两种语言之间生成绑定的操作并不是什么新奇的技术,但一直以来这都是一个不那么简单的任务,主要是因为需要在项目中使用外部模块/库时尽可能地保持兼容性。

Shiboken 的主要用途是扩展 Qt/C++ 项目功能,使它们变得 可脚本化

应用程序可脚本化意味着什么?

  • 允许解释型语言直接与 Qt/C++ 应用程序交互,

  • 提供从 Python 修改和创建应用组件/元素的功能,

  • 可以为应用创建插件/附加组件系统。

  • 使用外部 Python 功能补充过程。

可以查看这个 Shiboken 网上研讨会 以获得实际示例。

Shiboken 在 Qt 相关绑定生成方面表现出色,这意味着任何 Qt/C++ 项目都可以轻松地暴露给 Python。此外,Shiboken 已证明其支持 C++ 项目(无 Qt),这已在活动演讲和 博客文章 中展示。

将 Python 支持添加到知名解决方案/项目是我们在行业中看到的一种模式,涉及广泛的设备。这就是我们为何每天都在致力于改进 Qt for Python 的提供。

我们相信 Qt 和 Python 都将从这种交互中受益。