为什么选择 Qt for Python?#
来自tiobe.com/tiobe-index/python的截图,日期:2021.09.06
要回答这个问题,我们需要回顾一下,简单聊聊有关语言的话题。
Python 的历史与 Qt 相当悠久,同样,它也在不断成长,转变成为许多编程领域最常用、最受欢迎、最受需求的语言。
目前(2021年),很少会遇到对机器学习和人工智能一无所知的人。同样,当我们提到数据科学/分析/工程时,我们知道这很可能与 Python 有关。
我们可以通过一些公共调查来验证这一说法,这些调查展示了 Python 语言的演变和偏好,比如往年 StackOverflow 的调查。
以及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 都将从这种交互中受益。