pyqt-QObject
from PyQt5.QtCore import QObject
设置属性:
QObject.__subclasses__() 返回所有子类
obj.setObjectName('ppp') 设置ObjectName
obj.objectName() 返回名称
obj.setProperty('lm',51) #给控件设置自定义属性和属性值
print(obj.property('lm')) #返回属性值
print(obj.dynamicPropertyNames()) #返回所有的属性
父子关系:
obj0 = QObject()
obj1=QObject()
obj1.setParent(obj0) #给obj1设置父对象
obj1.setParent(None) #释放父对象
print(obj1.parent()) #返回父对象地址。<PyQt5.QtCore.QObject object at 0x000000E3702D0168>
print(obj0.children()) #返回子对象地址
print(obj0.findChild(QObject)) #返回指定类型的第一个子对象或孙对象
#参数1 类型或类型元组
print(obj0.findChild(QObject,'2')) #返回指定类型,objectName为2的第一个子对象或孙对象
#参数2 objectName属性
#没找到 返回 None
print(obj0.findChild(QObject, '3',Qt.FindDirectChildrenOnly))
#参数3:
#Qt.FindChildrenRecursively=0x1 查找object的所有孩子(递归搜索)也是默认
#Qt.FindDirectChildrenOnly=0x0 查找object的直接孩子
#需要 from PyQt5.QtCore import *
print(obj0.findChildren(QObject)) #查找指定类型的所有子对象和孙对象
del self.obj1 #删除对象
【删除栈中的对象名,而堆中实际空间没有删除,堆中的实际空间还可以被其它对象引用比如父子关系】
obj.deleteLater() 删除对象,堆中的实际空间也释放了
不会马上删除,它发出一个删除event,主循环接收到删除event后才删除
父对象被销毁后,子对象也就销毁了
print(i.isWidgetType()) #判断对象是不是控件
print(i.inherits('QWidget')) #判断对象i是不是继承于QWidget类;是返回True
信号:
obj2.destroyed.connect(lambda :print('obj2被销毁')) 在对象obj2被销毁之前立即发出,不能被阻止
会向槽函数传递一个对象参数【不知道是哪个对象???】
obj2.objectNameChanged.connect() #在objectName发生变化时发出信号
会向槽函数传递一个字符串参数,就是刚刚修改的objectName的名称
obj2.objectNameChanged.disconnect() #取消信号与槽函数的连接
obj2.blockSignals(True) #临时阻断信号与槽函数的连接
False 恢复连接
bool=obj2.signalsBlocked() #判断信号是否被临时阻断;Ture被阻断
s=obj2.receivers(obj2.objectNameChanged) #返回指定对象指定信号连接了几个槽函数
重写消息分发函数:
from PyQt5.QtWidgets import QApplication, QWidget,QLabel,QPushButton from PyQt5.QtCore import * import sys class win(QWidget): #创建一个类,为了集成控件 def __init__(self): super(win, self).__init__() self.setWindowTitle('窗口标题') self.resize(200,200) self.setup_ui()#控件布局函数 def setup_ui(self): #控件布局 #label = QLabel('标签控件', self) button = QPushButton('按钮', self) #label.move(10, 10) button.move(70, 150) button.pressed.connect(self.a) def a(self): print('按钮被点击了') class App(QApplication): def notify(self, rec, evt) : #重写消息分发函数。参数rec保存消息接收对象,参数evt保存消息事件 if rec.inherits('QPushButton') and evt.type()==QEvent.MouseButtonPress:
#rec.inherits('QPushButton') rec继承于QPushButton
print(rec, evt)
return super().notify(rec, evt) #执行父类QApplication的消息分发函数
if __name__=='__main__':
app=App(sys.argv) #创建应用
window=win()
window.show()
sys.exit(app.exec_())
QEvent参考:https://www.cnblogs.com/findumars/p/8076247.html
重写按钮事件函数:
from PyQt5.QtWidgets import QApplication, QWidget,QLabel,QPushButton from PyQt5.QtCore import * import sys class Btn(QPushButton): def event(self, evt): #重写按钮事件函数 if evt.type()==QEvent.MouseButtonPress: print(evt) return super().event(evt) def mousePressEvent(self, evt): #重写按钮的鼠标按下事件 print('鼠标按下了。。。。。。') return super().mousePressEvent(evt) class win(QWidget): #创建一个类,为了集成控件 def __init__(self): super(win, self).__init__() self.setWindowTitle('窗口标题') self.resize(200,200) self.setup_ui()#控件布局函数 def setup_ui(self): #控件布局 #label = QLabel('标签控件', self) button = Btn('按钮', self) #label.move(10, 10) button.move(70, 150) button.pressed.connect(self.a) def a(self): print('按钮被点击了') if __name__=='__main__': app=QApplication(sys.argv) #创建应用 window=win() window.show() sys.exit(app.exec_())
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步