【Python】【Day4】图像管理系统笔记_图形交互界面_PyQt5【3】

QObject 类型判定

作用:作为控件过滤器使用筛选出要进行操作的控件。

  • 比如要设置所有按钮的格式,那么可以使用 for 循环遍历,当控件继承自 QPushBotton 类时进行设置。

判定是否为控件类型

obj.isWidgetType()

比如 QObject 类型的对象就不是控件类型,而如按钮、标签等就是控件类型

判定某个类是否继承自某个类(直接继承 / 间接继承)

obj.inherits("父类名")

QObject 对象的删除

关于 Python 对象的内存管理机制

  • 参考文章:
    如何在Python中删除一个对象
  • 简单来说,在 Python 中,当一个对象被引用时(比如 obj1 = obj0)(Python 中变量的传递都是按引用传递的),他的引用次数就会增加一,当引用次数为 1 时,使用 del obj0 便可以删除 obj0,但是当引用次数大于1时,使用 del obj0 只是删除 obj0 这个标识符与内存中对象的联系,同时对象的被引用次数减 1,并不调用该对象的析构函数。
obj0 = object() # 创建一个对象,为 obj0 引用,此时引用次数为1
obj1 = obj0 # 引用 obj0,此时引用次数为2

del obj0 # 并不会删除内存中的对象,删除 obj0 这个标识符与内存中存储的 object 对象的联系而已,此时引用次数减为 1

del obj1 # 引用次数为 1,再 del 时真正删除内存中的 object 对象,调用析构函数

使用 deleteLater() 方法删除 QObject 对象

作用:
  删除一个对象时,同时解除它和父对象的关系(如被引用关系)。

  • 注意:使用这个方法时并不立即销毁对象,而是向主消息循环发送一个 event,下一次主消息循环收到这个 event 之后才会销毁对象。
  • 好处:在延迟删除的时间里进行一些操作
  • 坏处:内存释放不及时

事件

  信号是对事件的封装,内置了许多种信号,事件更贴近底层。
  当要使用的触发信号在内置类型中找不到时,可以通过接收事件进行处理。

定时器

obj.startTimer

1.参数一:触发间隔 / ms
2.参数二:定时器类型

  • 返回值:定时器 id

def timerEvent(self, evt):

定时器中断回调函数。

obj.killTimer(timer_id)

关闭定时器,参数为定时器 id。

示例代码

初步使用

import sys
from PyQt5.Qt import *

# 重写类,重写中断回调函数
class MyObject(QObject):
    def timerEvent(self, evt): # 定时器中断回调
        print("1s")


app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle("定时器")
window.resize(500, 500)
window.move(400, 200)

obj = MyObject()
timer_id = obj.startTimer(1000)


window.show()
sys.exit(app.exec_())

倒计时显示

import sys
from PyQt5.Qt import *


class MyLabel(QLabel):
    def __init__(self, *args, **kwargs):  # *args, **kwargs 接收任何参数
        super().__init__(*args, **kwargs)
        self.setText("10")
        self.move(100, 100)
        self.timer_id = self.startTimer(1000)  # 存储定时器 id

    def timerEvent(self, evt):  # 定时器中断回调
        print("1s")
        text = int(self.text()) - 1
        if text == 0:
            self.killTimer(self.timer_id)
        self.setText(str(text))


app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle("定时器")
window.resize(500, 500)
window.move(400, 200)

label = MyLabel(window)

window.show()
sys.exit(app.exec_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Witheart__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值