本文介绍PyQt5里面的两个类型判断的api,一个是判断是否是控件类型isWidgetType,另一个是判断对象是否继承自某一个父类inherits(父类),而且包括直接继承和间接继承。

isWidgetType()判断

该api用来判定一个对象是否属于控件。如果是控件,那么返回True,如果不是,则为False。

下面这个代码是一个案例:

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("类型判定学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.leixing()

    def leixing(self):
        # 创建四个对象
        obj = QObject()
        w = QWidget()
        btn = QPushButton()
        label = QLabel()

        objs = [obj, w, btn, label]
        for o in objs:
            print(o.isWidgetType())  # 判断是否是一个控件类型

# 方便在模板里进行调试
if __name__ == "__main__":
    import  sys
    app= QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

下面这四个,除了QObject其他都是控件,分别是窗口、按钮、标签。因为结果为False、True、True、True

obj = QObject()
w = QWidget()
btn = QPushButton()
label = QLabel()

inherits(父类)

用来判断某一对象是否继承自某一父类。含直接集成和间接继承。

还是在上面obj = QObject()、w = QWidget()、btn = QPushButton()、label = QLabel()这四个内容进行判断。

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("类型判定学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.leixing()

    def leixing(self):
        # 创建四个对象
        obj = QObject()
        w = QWidget()
        btn = QPushButton()
        label = QLabel()

        objs = [obj, w, btn, label]
        for o in objs:
            print("------分割线------")
            print(o.inherits("QObject"))  # 判断是否是一个控件类型
            print(o.inherits("QWidget"))  # 判断是否是一个控件类型
            print(o.inherits("QPushButton"))  # 判断是否是一个控件类型

# 方便在模板里进行调试
if __name__ == "__main__":
    import  sys
    app= QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行结果:

------分割线------
True
False
False
------分割线------
True
True
False
------分割线------
True
True
True
------分割线------
True
True
False

从这个结果可以看出,所有的对象都集成与QObject.

关于继承关系,可以看之前写的这篇博文:

对象的父子关系_常用API_PyQt5学习笔记(九)

案例展示

创建一个窗口,里面包含了多个QLabel或其他控件。要求将所有的QLabel控件(也就是过滤,只留下QLabel控件),设置为背景色cyan。

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("类型判定学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.leixing()

    def leixing(self):
        # 创建许多控件
        lab1 = QLabel(self)
        lab1.setText("我最大")

        lab2 = QLabel(self)
        lab2.setText("我老二")
        lab2.move(100, 0)

        btn = QPushButton(self)
        btn.setText("点我")
        btn.move(200, 100)

        # 判断是否是QLabel标签下的控件inherits
        # 注意inherits后面跟的是字符串
        for widget in self.children():
            if widget.inherits("QLabel"):
                widget.setStyleSheet("background-color:cyan")


# 方便在模板里进行调试
if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

运行效果:

运行结果

self.children()寻找的是获取所有子对象。


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/pyqt5-isWidgetType-inherits.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 26 日
如果觉得我的文章对你有用,请随意赞赏