Object是所有Qt对象的基类。也是需要掌握的所有的控件的基础,因此非常重要,是学习PyQt的基础。

在前面,介绍面向对象的编程方法,并制作了活动模板qto。

父类的继承

新建一个py脚本,例如objict.py

输入qto,嵌入模板。

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

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):


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

为了方便修改和观察,新建一个def,名为myobject

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


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.myobject()

    def myobject(self):
        # 获得父类
        mros = QObject.mro()
        for mro in mros:
            print(mro)


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

运行结果:

<class 'PyQt5.QtCore.QObject'>
<class 'sip.wrapper'>
<class 'sip.simplewrapper'>
<class 'object'>

对象名称、属性的API

SetObjectName("唯一名称") : 给Qt对象设置一个名称,一般这个名称市唯一的,当作对象的ID来使用。

objectName() :获取对象的名称

setProperty("属性名称", 值) : 获取对象的一个属性值

dynamicPropertyNames : 获取一个对象中所有通过setProperty()设置的属性名称

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


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.objectNameAndProperty()

    # 对象名称和属性的操作
    def objectNameAndProperty(self):
        # 测试API
        obj = QObject()
        obj.setObjectName("NOTICE")  # 设置对象的名称
        print(obj.objectName())  # 获取对象的名称

        # 设置两个属性的值
        obj.setProperty('Notice1', 'error')
        obj.setProperty('Notice2', 'warning')
        # 获取两个属性的值
        print(obj.property('Notice1'))
        print(obj.property('Notice2'))
        # 获取一个对象中所有通过setProperty()设置的属性名称
        print(obj.dynamicPropertyNames())


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

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

运行结果:

NOTICE
error
warning
[PyQt5.QtCore.QByteArray(b'Notice1'), PyQt5.QtCore.QByteArray(b'Notice2')]

应用场景

不懂没关系,因为很多是后面的内容,这里仅仅做一个介绍演示。

介绍一个例子,用于qss的ID选择器、属性选择器。

  • 要求

    凡是提示QLabel控件,都要求设置:

    • 字体大小为25px
    • 字体颜色为灰色
    • 边框圆角为8px
  • 信息提示分多个级别

    • 正常(normal): 绿色边框、绿色字体
    • 警告(warning):黄色边框、黄色字体
    • 错误(error):红色边框、红色字体

新建一个样式表qobject.qss,写入样式内容:

QLabel#notice{
    font-size: 20px;
    color: gray;
    border: 1px solid gray;
    border-radius: 8px;
}

QLabel#notice[notice_level="normal"] {
    color: green;
    border-color: green;
}

QLabel#notice[notice_level="warning"] {
    color: yellow;
    border-color: yellow;
}

QLabel#notice[notice_level="error"] {
    color: red;
    border-color: red;
}

pyqt的代码:

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


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QObject学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        self.objectNameAndProperty()

    # 对象名称和属性的操作
    def objectNameAndProperty(self):
        # **********  案例演示  **********

        # 将QSS应用到全局
        with open("qobject.qss", 'r') as f:
            qApp.setStyleSheet(f.read())

        label = QLabel(self)
        label.setObjectName("notice")
        label.setText("notice标签")
        label.move(50, 50)

        label = QLabel(self)
        label.setObjectName("notice")
        label.setProperty("notice_level", "normal")
        label.setText("normal标签")
        label.move(50, 100)

        label = QLabel(self)
        label.setObjectName("notice")
        label.setProperty("notice_level", "warning")
        label.setText("warning标签")
        label.move(90, 150)

        label = QLabel(self)
        label.setObjectName("notice")
        label.setProperty("notice_level", "error")
        label.setText("error标签")
        label.move(100, 200)


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

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

运行效果:

运行效果


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

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