pyqt5-002

   控件是构建应用程序的基本模块,PyQt5提供各种各样的控件,包括按钮、复选框、滑动条、列表框等。

  控件分类:

    按钮

        输入控件

        展示控件

        容器控件

        结构控件

       滚动控件

      辅助控件

       其他   

  QCheckBox:

    QCheckBox复选框控件,它有两个状态:打开和关闭,他是一个带有文本标签(Label)的控件。复选框常用于表示程序中可以启用或禁用的功能。

    http://code.py40.com/pyqt5/26.html

 

 

 

  相同的共性:

  1. 名字
  2. 矩形区域
  3. 位置
  4. 大小
  5. 可以设置样式      

  继承关系:

  控件们=====>QWidget=====>QObject

 

from PyQt5.Qt import *
import sys


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



    def setup_ui(self):
        # self.QObject_test()
        # self.QObject_name_practice()
        self.QObject_copy_children()
        pass


    def QObject_test(self):
        # 继承结构测试
        QObject.__subclasses__()
        # 获取所有子类
        mros = QObject.mro()
        for mro in mros:
            print(mro)
        # 打印继承的父类
        # 对当前类和基类进行搜索以确定方法所在的位置。而搜索的顺序就是所谓的「方法解析顺序」(Method Resolution Order,或MRO)。对于只支持单继承的语言来说,MRO 一般比较简单;而对于 Python 这种支持多继承的语言来说,MRO 就复杂很多。


    def QObject_name_practice(self):
        # 对象名称和属性的操作

        # *************测试API**************
        # obj = QObject()
        # obj.setObjectName('notice')
        # print(obj.objectName())
        #
        # obj.setProperty('NOTICE_LEVEL1', "error")
        # obj.setProperty('NOTICE_LEVEL2', "waring")
        #
        # print(obj.property('NOTICE_LEVEL1'))
        # # 获取属性值
        #
        # print(obj.dynamicPropertyNames())
        # 获取一个对象中所有通过setProperty()设置的属性名称
        # *****************结束***************

        # ****************案列演示*****************
        with open('QObject.qss', 'r') as f:
            qApp.setStyleSheet(f.read())

        label1 = QLabel(self)
        label1.setObjectName('notice')
        label1.setProperty('notice_level','normal')
        label1.setText('label1')

        label2 = QLabel(self)
        label2.move(100, 100)
        label2.setObjectName('notice')
        label2.setProperty('notice_level','error')
        label2.setText('label2')

        btn = QPushButton(self)
        btn.setText('btn')
        btn.move(50, 50)
        # label.setStyleSheet('font-size:20px; color:green;')
        # ****************演示结束*****************

        pass


    def QObject_copy_children(self):
        # 对象的复制关系操作
        # ***********测试API开始**************
        obj1 = QObject()
        obj2 = QObject()
        obj3 = QObject()

        print('obj1==>', obj1)
        print('obj2==>', obj2)
        print('obj3==>', obj3)
        obj1.setParent(obj2)
        obj3.setParent(obj2)

        obj3.setObjectName('3')

        # label1 = QLabel()
        # label1.setParent(obj2)
        # 多个父对象设置,最后面的会覆盖前面,以最后的为准
        # print(obj1.parent())
        # print(obj2.children())
        # 获得他的子对象

        # print(obj2.findChild(QObject,'3',Qt.FindDirectChildrenOnly))
        # print(obj2.findChile(QLabel)) # 必须是同类类型
        # 有三个参数,获取某一个指定名称和类型的子对象
        # 参数1:对象类型:QObject ; 类型元组:(QPushButton,QLabel)
        # 参数2:对象名称:notice; 可以省略
        # 参数2:查找选项(Qt.FindChildrenRecursively->递归查找,默认选项;Qt.FindDirectChildrenOnly->只查找直接子对象)
        # ***********测试API结束**************

        print(obj2.findChildren(QObject))


        pass

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

 

 

QObject.qss文件的内容

QLabel#notice{
font-size:20px;
color:orange;
}
QLabel#notice[notice_level="normal"]{
font-size:20px;
color:green;
}
QLabel#notice[notice_level="waring"]{
font-size:20px;
border-color:yellow;
}
QLabel#notice[notice_level="error"]{
font-size:20px;
border-color:red;
}

 

posted @ 2020-05-07 12:06  King~~~  阅读(169)  评论(0编辑  收藏  举报