首页 > Python资料 博客日记
【python】PyQt5对象类型的判定,对象删除操作详细解读
2024-07-05 19:00:05Python资料围观103次
本篇文章分享【python】PyQt5对象类型的判定,对象删除操作详细解读,对你有帮助的话记得收藏一下,看Python资料网收获更多编程知识
✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,云原生K8S,人工智能,js逆向,App逆向,网络系统安全,数据分析,PyQt5,tkinter,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:PyQt5桌面应用开发,零基础到进阶应用实战
景天的主页:景天科技苑
PyQt5类型判定
主要是用来判定一个对象的类型,或者说是否继承自某个类
相关API和应用场景如下
主要有两个方法
- isWidgetType() 判断某个对象是都控件类型
- inherits() 一个对象是否继承(直接或间接)自某个父类
两方法返回值均为True或False
类型判断演示
遍历对象,判断对象所属类型和父类
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.QObject类型判定()
def QObject类型判定(self):
# *************API***************开始
obj = QObject()
w = QWidget()
btn = QPushButton()
label = QLabel()
objs = [obj, w, btn, label]
for o in objs:
print("是否是QWidget的控件类型",o.isWidgetType())
print("父类是否是QWidget",o.inherits("QWidget"))
print("父类是否是QPushButton",o.inherits("QPushButton"))
print("------------------------------------------")
# *************API***************结束
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行。可以判定某个对象所属的类型
PyQt5类型判断案例
根据所属类型, 设置指定的样式
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.QObject类型判定()
def QObject类型判定(self):
# *************API***************开始
# obj = QObject()
# w = QWidget()
# btn = QPushButton()
# label = QLabel()
#
# objs = [obj, w, btn, label]
# for o in objs:
# print("是否是QWidget的控件类型",o.isWidgetType())
# print("父类是否是QWidget",o.inherits("QWidget"))
# print("父类是否是QPushButton",o.inherits("QPushButton"))
# print("------------------------------------------")
# *************API***************结束
# *************案例***************开始
label1 = QLabel(self)
label1.setText("景天科技苑")
label1.move(100, 100)
label2 = QLabel(self)
label2.setText("科技不间断")
label2.move(150, 150)
btn = QPushButton(self)
btn.setText("点我")
btn.move(200, 200)
#循环遍历子对象
# for widget in self.findChildren(QLabel):
for widget in self.children():
# print(widget)
# if widget.isWidgetType():
#将子对象中为QLabel的对象设置背景样式
if widget.inherits("QLabel"):
widget.setStyleSheet("background-color: cyan;")
# *************案例***************结束
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行,QLabel颜色都发生了变化,btn的颜色不变,说明选定了QLabel
PyQt5删除对象
obj.deleteLater()
删除一个对象时, 也会解除它与父对象之间的关系。
deleteLater()并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象。
这样做的好处是可以在这些延迟删除的时间内完成一些操作,坏处就是内存释放会不及时。
删除对象案例
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.QObject对象删除()
def QObject对象删除(self):
obj1 = QObject()
#为了防止局部变量运行完方法就销毁,将局部变量赋值给类变量
self.obj1 = obj1
obj2 = QObject()
obj3 = QObject()
obj3.setParent(obj2)
obj2.setParent(obj1)
#创建信号与槽
obj1.destroyed.connect(lambda : print("obj1被释放了"))
obj2.destroyed.connect(lambda : print("obj2被释放了"))
obj3.destroyed.connect(lambda : print("obj3被释放了"))
#删除对象
# del obj2 #这样并不能删除
obj2.deleteLater()
print(obj1.children())
#obj2并没有立马被释放
print("obj2",obj2)
#执行了deleteLater后,向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象,才会真正的去释放相关的对象
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行
可以看到obj2并没有立马被删除,立马打印obj1的子对象和obj2还是能打印出来的
过一段时间,obj2才被删除
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程