PySide/zh-cn

简介

PySide库是跨平台图形用户界面(GUI)工具包Qt的Python封装。FreeCAD使用Qt作为其主要的GUI工具包。Qt本身不仅仅是一个GUI工具包,它是一个包含多种用途的C++库的集合,例如可以使用Qt库组件进行网络编程,所有这些都可以通过PySide在Python中访问。任何可以用C++创建的图形界面,同样可以用Python创建和修改。使用Python的一个优势是,Qt界面可以实时开发和测试,因为我们不需要编译源文件。

在FreeCAD中导入PySide(任何版本)的推荐方式是:

from PySide import QtCore, QtGui, QtWidgets

Qt & PySide 版本

使用PySide创建的示例。左:一个简单的对话框。右:一个包含图表的更复杂的对话框。

Top

FreeCAD 和 PySide

FreeCAD最初的理念是将Cas.CADE(几何内核)、Qt(GUI工具包)和Python结合在一起,创建一个带有内置脚本引擎的免费3D参数化CAD程序。这发生在2000年代初期,即PySide出现之前,因此在FreeCAD的前十年里使用的是另一个封装——PyQt。PySide的出现是为了解决PyQt的许可问题,FreeCAD在2013年完成了向PySide的切换(commit 1dc122dc9a)。

如果您想了解您的安装使用的是哪个Qt版本,关于对话框中有包含Qt的版本列表。

更多信息请参阅:

当您安装FreeCAD时,您将同时获得Qt和与之匹配的PySide,作为软件包的一部分。如果您正在自行编译,则必须验证这两个库的匹配版本已安装,以便FreeCAD正确运行。当然,PySide仅在Qt存在的情况下才能工作。

Top

多版本兼容性

PySide与后续的PySide2和PySide6库之间的主要区别在于命名空间。PySide(Qt4)具有主要的命名空间QtGuiQtCore,而PySide2(Qt5)和PySide6(Qt6)引入了额外的命名空间QtWidgets,所有控件现在都位于其中,它们以前位于QtGui命名空间中。

FreeCAD处理不同版本的Qt/PySide的方式是将它们都称为PySide,这实际上应该被视为PySideX。无论安装的是哪个Qt/PySide版本,它们都通过PySide导入。

一个shim处理版本之间的差异。这个PySide shim位于为Qt5/Qt6编译的FreeCAD安装目录的Ext/目录中。

/usr/share/freecad/Ext/PySide

该模块只是从PySide2/6导入必要的类,并将它们放入PySide命名空间中。之所以选择这种方法,是因为它能够从Qt4的角度提供向后兼容性。

PySide2.QtCore -> PySide.QtCore
PySide2.QtGui -> PySide.QtGui
PySide2.QtWidgets -> PySide.QtWidgets
PySide2.QtSvg -> PySide.QtSvg
PySide2.QtUiTools -> PySide.QtUiTools

因此,PySide2.QtWidgets类也被放置在PySide.QtGui命名空间中。

PySide2.QtWidgets.QCheckBox -> PySide.QtGui.QCheckBox

但目前推荐的方式是使用现代的命名空间。

from PySide import QtCore, QtGui, QtWidgets

my_check_box = QtWidgets.QCheckBox()

Top

PySide使用示例

PySide示例分为3个部分,根据对PySide、Python和FreeCAD内部机制的接触程度进行区分。第一个页面包含PySide的概述;第二个和第三个页面主要是不同级别的代码示例。

期望这些示例对入门有所帮助,之后用户可以查阅在线的其他资源,或官方文档。

Top

文档

不同版本之间在控件处理方面存在一些差异。程序员应该了解这些不兼容性,并在特定平台上某些功能未按预期工作时查阅官方文档。虽然不常见,但有时可能需要通过if语句进行版本化调用。

PySide文档指的是Python风格的类;然而,由于Qt最初是一个C++库,相同的信息应该可以在相应的C++参考文档中找到。

Top