本文介绍PyQt5里面的两个类型判断的api,一个是判断是否是控件类型isWidgetType,另一个是判断对象是否继承自某一个父类inherits(父类),而且包括直接继承和间接继承。
isWidgetType()判断
该api用来判定一个对象是否属于控件。如果是控件,那么返回True,如果不是,则为False。
下面这个代码是一个案例:
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("类型判定学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
self.leixing()
def leixing(self):
# 创建四个对象
obj = QObject()
w = QWidget()
btn = QPushButton()
label = QLabel()
objs = [obj, w, btn, label]
for o in objs:
print(o.isWidgetType()) # 判断是否是一个控件类型
# 方便在模板里进行调试
if __name__ == "__main__":
import sys
app= QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
下面这四个,除了QObject其他都是控件,分别是窗口、按钮、标签。因为结果为False、True、True、True
obj = QObject()
w = QWidget()
btn = QPushButton()
label = QLabel()
inherits(父类)
用来判断某一对象是否继承自某一父类。含直接集成和间接继承。
还是在上面obj = QObject()、w = QWidget()、btn = QPushButton()、label = QLabel()这四个内容进行判断。
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("类型判定学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
self.leixing()
def leixing(self):
# 创建四个对象
obj = QObject()
w = QWidget()
btn = QPushButton()
label = QLabel()
objs = [obj, w, btn, label]
for o in objs:
print("------分割线------")
print(o.inherits("QObject")) # 判断是否是一个控件类型
print(o.inherits("QWidget")) # 判断是否是一个控件类型
print(o.inherits("QPushButton")) # 判断是否是一个控件类型
# 方便在模板里进行调试
if __name__ == "__main__":
import sys
app= QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
运行结果:
------分割线------
True
False
False
------分割线------
True
True
False
------分割线------
True
True
True
------分割线------
True
True
False
从这个结果可以看出,所有的对象都集成与QObject
.
关于继承关系,可以看之前写的这篇博文:
案例展示
创建一个窗口,里面包含了多个QLabel或其他控件。要求将所有的QLabel控件(也就是过滤,只留下QLabel控件),设置为背景色cyan。
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("类型判定学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
self.leixing()
def leixing(self):
# 创建许多控件
lab1 = QLabel(self)
lab1.setText("我最大")
lab2 = QLabel(self)
lab2.setText("我老二")
lab2.move(100, 0)
btn = QPushButton(self)
btn.setText("点我")
btn.move(200, 100)
# 判断是否是QLabel标签下的控件inherits
# 注意inherits后面跟的是字符串
for widget in self.children():
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_())
运行效果:
self.children()
寻找的是获取所有子对象。