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_())

 

原文地址:https://www.cnblogs.com/mosewumo/p/12462480.html