为什么选择Qt for Python?¶


截图来自 tiobe.com/tiobe-index/python, 于2021.09.06
要回答这个问题,我们需要退一步,稍微讨论一下语言。
Python 已经存在了几乎与 Qt 相同的时间,同样地,它一直在发展,并转变为许多编程领域中最常用、最受喜爱和最需要的语言。
目前(2021年),很少有人了解机器学习和人工智能,却没有听说过Python。同样,当我们听到数据科学/分析/工程时,我们知道它很可能与Python有关。
可以通过公开的调查来验证这一说法,这些调查显示了Python语言的演变和偏好,例如过去几年的StackOverflow调查:
以及TIOBE指数(右侧图片)。
很自然地认为这些来源可能不足以从总体上判断语言,但它确实突显了全球开发者中的一种趋势。
降低Qt门槛¶
经验丰富的C++开发人员将能够轻松地从零开始设置Qt应用程序,甚至能够理解使用Qt编写的不同代码库。此外,许多团队是多学科的,其他项目/公司的开发人员可能不精通C++。
Python一直在吸引人们进入编程领域,出于同样的原因,即使是具有不同背景的人也能够编写代码,这意味着不同的团队能够使用“相同的语言”进行交流。
在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?),其功能已经 通过我们活动中的演讲广泛展示,例如来自我们的 视频 部分的内容。
生成两种语言之间的绑定并不是什么新鲜事,但这始终是一项不简单的任务,主要是在项目中使用外部模块/库时尽可能保持兼容性。
Shiboken的主要用途是扩展Qt/C++项目的功能,使其可编写脚本。
应用程序可脚本化意味着什么?
使解释型语言能够直接与Qt/C++应用程序交互,
提供从Python修改和创建应用程序组件/元素的选项,
为应用程序创建插件/附加系统的可能性。
使用外部Python功能补充一个过程。
查看这个Shiboken Webinar以获取一个实践示例。
Shiboken 擅长于依赖 Qt 的绑定生成,这意味着任何 Qt/C++ 项目都可以轻松地暴露给 Python。此外,Shiboken 已经证明了对 C++ 项目(不依赖 Qt)的支持,如事件演讲和博客文章所示。
为知名解决方案/项目添加Python支持是我们在行业中广泛看到的一种模式,适用于各种设备。 这就是为什么我们每天都在努力改进Qt for Python的提供。
我们相信Qt和Python都将从这种互动中受益。