zoukankan      html  css  js  c++  java
  • pyqt5学习之object

    主要记录object的一些属性应用

    1.object继承的父类

    # -*- coding: utf-8 -*-
    from PyQt5.Qt import *
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.resize(500,500)
            self.setWindowTitle('QObject学习')
            self.setup_ui()
    
        def setup_ui(self):
            self.QObjectj继承结构测试()
    
    
        def QObjectj继承结构测试(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'>

    2.对象的名称和属性设置

    主要应用场景:用于QSS的ID选择器,属性选择器;用于装饰器的信号与槽

    # -*- coding: utf-8 -*-
    from PyQt5.Qt import *
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.resize(500,500)
            self.setWindowTitle('QObject学习')
            self.setup_ui()
    
        def setup_ui(self):
            self.QObjectj对象名称和属性的操作()
    
    
        def QObjectj对象名称和属性的操作(self):
            obj = QObject()
            obj.setObjectName('notice') # 给一个QT对象设置一个名称,当做对象的ID使用
            print(obj.objectName()) # 获取一个qt对象的ID名称
    
            obj.setProperty('notice_level','error')  # 给一个QT对象动态的添加一个属性与值
            obj.setProperty('notice_level2','warning')
    
            print(obj.property('notice_level'))  # 获取一个对象的属性值
            print(obj.dynamicPropertyNames())  # 获取一个对象所有通过setProerty设置的属性名称
    
    
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
    
        window = Window()
        window.show()
        sys.exit(app.exec_())

    案例:

    # -*- coding: utf-8 -*-
    from PyQt5.Qt import *
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.resize(500,500)
            self.setWindowTitle('QObject学习')
            self.setup_ui()
    
        def setup_ui(self):
            self.QObjectj对象名称和属性的操作()
    
    
        def QObjectj对象名称和属性的操作(self):
            # 设置控件样式种方法
            # 1.通过QSS文件
            # 2.通过控件.setStyleSheet命令设置样式
            #本文通过法一QSS文件设置样式
            with open('Object.qss','r') as f:
                qApp.setStyleSheet(f.read())
    
            label = QLabel(self)
            label.setObjectName('notice')  # 设置ID
            label.setProperty('notice_level','warning')  # 设置属性
            label.setText('学习')
    
            label2 = QLabel(self)
            label2.move(200,200)
            label2.setObjectName('notice')  # 设置ID
            label2.setProperty('notice_level2', 'warning')  # 设置属性
            label2.setText('学习')
    
            btn = QPushButton(self)
            btn.setObjectName('notice')
            btn.setText('按钮')
            btn.move(50,50)
    
    
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
    
        window = Window()
        window.show()
        sys.exit(app.exec_())

    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;
    }

    3.Qobject信号与槽的应用

    # -*- coding: utf-8 -*-
    from PyQt5.Qt import *
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.resize(500,500)
            self.setWindowTitle('QObject学习')
            self.setup_ui()
    
        def setup_ui(self):
            self.QObjectj信号与槽()
    
    
        def QObjectj信号与槽(self):
            # QObject有两个信号
            #1.destroyed
            #2.objectNameChanged
            self.obj = QObject()
    
            def destroy_cao(obj):
                print("对象被释放了")
    
            self.obj.destroyed.connect(destroy_cao)
    
            del self.obj
    
    
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
    
        window = Window()
        window.show()
        sys.exit(app.exec_())
    # -*- coding: utf-8 -*-
    from PyQt5.Qt import *
    
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.resize(500,500)
            self.setWindowTitle('QObject学习')
            self.setup_ui()
    
        def setup_ui(self):
            self.QObjectj信号与槽()
    
    
        def QObjectj信号与槽(self):
            # QObject有两个信号
            #2.objectNameChanged
            self.obj = QObject()
    
            def obj_name_cao(name):
                print('对象名称发生了改变')
    
            self.obj.objectNameChanged.connect(obj_name_cao)
            self.obj.setObjectName('xxx')
    
    
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
    
        window = Window()
        window.show()
        sys.exit(app.exec_())

    4.PYQT事件机制

    import sys
    from PyQt5.Qt import *
    
    # 该为事件机制第一级
    class App(QApplication):
        def notify(self,recevier,evt):
            if recevier.inherits('QPushButton') and evt.type() == QEvent.MouseButtonPress:
                print(recevier,evt)
                # 上述两行代码为子类截取事件,自定义事件
            return  super().notify(recevier, evt)
            # 一定要有该行否则程序崩溃,因为子类定义了notify方法缺少其他运行机制需要继承父类
    
    
    # 该为事件机制第二级
    class Btn(QPushButton):
        def event(self,evt):
    
            if evt.type() == QEvent.MouseButtonPress:
                print(evt)
            return super().event(evt)
    
        # 该为事件机制第三级
        def mousePressEvent(self, *args, **kwargs):
            print("鼠标被按下了......") # 事件机制最后一级,自定义槽信息,屏蔽自己定义的槽函数
            return super().mousePressEvent(*args, **kwargs)#改代码实现自己定义槽函数实现
    
    
    app = App(sys.argv)
    
    window = QWidget()
    
    btn = Btn(window)
    btn.setText('按钮')
    btn.move(100,100)
    
    def cao():
        print('按钮被点击了')
    
    btn.pressed.connect(cao)
    
    window.show()
    sys.exit(app.exec_())

    5.定时器使用

    from PyQt5.Qt import *
    import sys
    
    
    class mylabel(QLabel):
        def __init__(self, *args, **kwargs):
            super(mylabel, self).__init__(*args, **kwargs)
            # 必须要继承父类,因为自己定义的子类不全,*args, **kwargs方便不定参数传值避免出错
            self.setText('10')
            self.move(100,100)
            self.setStyleSheet('font-size: 22px;')
    
        def setSec(self, sec):
            self.setText(str(sec))
    
        def startmytimer(self, ms):
            self.timer_id = self.startTimer(ms ,Qt.PreciseTimer)
            #timer_id获取定时器唯一标识,startTimer设定一个时间,间隔设定时间运行程序
    
        def timerEvent(self, *args, **kwargs):
            # 利用该事件机制可以
            print('事件机制')
            current_sec = int(self.text())
            current_sec -= 1
            self.setText(str(current_sec))
    
            if current_sec == 0:
                print("停止")
                self.killTimer(self.timer_id)
                #利用killTimer根据timer_id杀死定时器
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.setWindowTitle('QObject定时器的使用')
    window.resize(500,500)
    
    label = mylabel(window)
    label.setSec(5)
    label.startmytimer(500)
    
    window.show()
    sys.exit(app.exec_())

     

  • 相关阅读:
    转载:javaweb学习总结(二十九)——EL表达式
    转载:javaweb学习总结(二十八)——JSTL标签库之核心标签
    转载:javaweb学习总结(二十七)——jsp简单标签开发案例和打包
    空指针异常
    转载:javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
    转载:javaweb学习总结(二十五)——jsp简单标签开发(一)
    转载:javaweb学习总结(二十四)——jsp传统标签开发
    线性代数的本质-05-行列式
    线性代数的本质-04补充-三维空间中的线性变换
    线性代数的本质-04-矩阵乘法与线性变换复合
  • 原文地址:https://www.cnblogs.com/mosewumo/p/12462480.html
Copyright © 2011-2022 走看看