掌握Pyside6控件类属性与方法:QWidget源代码解读与Python小白学习指南
通过本文,您可以掌握以下内容:

Pyside6控件类的属性和方法 Pyside6控件为什么看不到执行过程? Pyside6如何查看相关类的属性和方法?
对于Python新手来说,在学习Pyside6控件时,按照网上的一些例子,可以快速运行控件。但是当我查看该控件的python源代码时,我很困惑。本文以QWidget为例进行讲解。
QWidget python 源代码
上图是QWidget的Python源代码的一部分。你能明白多少?
大多数方法都包含 self 参数。它的作用是什么?为什么很多方法体都是空实现,使用pass或者简单return,没有看到具体的实现?为什么该方法可以正常使用?定义的枚举和属性都是none。为什么可以使用枚举类,枚举类的枚举值在哪里?
1.Pyside6类的属性和方法
要理解为什么控件的大多数方法都包含 self 参数,您只需要了解 Python 类和实例的属性和方法即可。
实例属性和类属性
类的对象是该类的一个实例。类的实例属性由对象拥有并包含在每个对象中。不同的物体不会互相干扰。类的类属性由该类拥有,包含在该类中,并为所有类对象共享。通常,实例属性在 __init__ 方法中声明和初始化,并使用 self.bound 进行绑定。类属性在类作用域中声明,并且不使用 self 进行绑定。
python 类、实例和属性的关系
实例方法、类方法、静态方法
Python类中有3个方法:
注意:当Python解释器构造类和对象时,类先于对象生成。因此,类属性和类方法先于实例属性和实例方法生成。所以当生成类方法时,还没有实例属性,因此无法在类方法中访问实例属性。
专有方法
以双下划线 __xxx__ 开头和结尾的方法是专有方法,也称为魔术方法。这些方法被Python赋予了特殊的含义,用户可以根据自己的需要实现这些方法。例如,QWidget类重写Python对象方法:
2.Pyside6的调用流程
开发Pyside6时,很多源代码只包含方法名、传递关键字和空枚举类。那么pyside6代码实例化和调用方法时的整个流程是怎样的。
在PySide6中,Python和Qt的C++库的关联是通过绑定技术实现的。具体来说,PySide6 使用 Shiboken,这是一种绑定生成工具,可以自动将 C++ 类和函数映射到 Python。这样,PySide6就可以在Python中使用Qt的功能了。关键技术概念:
在PySide6中,staticMetaObject是一个静态属性,存在于从QObject继承的所有类中。它的主要功能是提供对 Qt 元对象系统的访问。 Qt 中使用这个元对象系统来实现信号和槽机制、属性系统和其他反射功能。
元对象系统
Qt 的元对象系统是一个运行时类型信息系统,提供以下功能:
staticMetaObject的作用
staticMetaObject 是一个包含类元数据的对象,提供对以下内容的访问:
staticMetaObject 提供对 PySide6 中 Qt 元对象系统的访问,允许在运行时查询类的元数据。它是实现动态属性访问、信号槽机制、反射函数的基础,大大增强了代码的灵活性和动态特性。
3.Pyside6控制类的正确使用
如何正确使用Pyside6控件,我们需要了解Qt for Python相关文档
访问QT官网地址
访问官网:选择pyside对应的版本。
QT官网
搜索控制类
例如,如果您想了解Qwidget类,请在上面的搜索框中输入关键字并按Enter键。
控制类文档
查看控件类信息
根据上面的搜索结果,点击进去就可以看到该类的详细信息,包括该类的继承关系、属性、方法、枚举类、信号等。通过右侧列表可以快速定位到属性和方法
查找控制类
对于枚举类,将Python源代码复制到界面中搜索,就会看到如何使用。例如,如果Qwidget类中定义了RenderFlag = None,那么你可以搜索RenderFlag,你就会知道有哪些枚举值。
枚举类