赞
踩
# 下面所有demo写在这里
obj = QObject()
# 名称
obj.setObjectName("object") # 设置
print(obj.objectName()) # 获取
# 属性
obj.setProperty('!', '!') # 设置属性
obj.setProperty('notice', 'error') # 属性可设置多个
print(obj.property('notice')) # 获取属性
print(obj.dynamicPropertyNames()) # 获取所有属性的名
# 设置文本
obj.setText(text)
# 调整大小(可缩放)
obj.reisze(w,h)
# 设置固定大小(不可缩放)
obj.setFixedSize(w,h)
# 移动
obj.move(x,y)
# 禁用最大化、关闭按钮
obj.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
obj = QObject()
# 判断是否为控件类别
print(obj.isWidgetType())
# 判断是否继承自某一个类
print(obj.inherits('QWidget')) # QWidget也继承自QWidget类
# 可根据inherits和isWidgetType以另一种思路设计控件的qss样式
for widget in self.children():
if widget.inherits('QLabel'): # 若控件是QLabel类型,将文字变为blue
widget.setStyleSheet('color:blue;')
obj0 = QObject() obj1 = QObject() obj2 = QObject() obj3 = QObject() obj4 = QObject() obj5 = QObject() obj5.setObjectName('obj5') # 设置父对象 obj3.setParent(obj1) obj4.setParent(obj2) obj5.setParent(obj2) obj1.setParent(obj0) obj2.setParent(obj0) print('obj4的parent:' , obj4.parent()) # 查找父对象 print('obj0的children:' , obj0.children()) # 查找所有直接子对象 print('obj0的findChild:' , obj0.findChild(QObject)) print('obj0的名字为"obj5"的findChild:',obj0.findChild(QObject,'obj5')) print('obj0的findChildren:' , obj0.findChildren(QObject)) # 所有子孙对象
self.obj0 = QObject()
obj1 = QObject()
obj2 = QObject()
obj2.setParent(obj1)
obj1.setParent(self.obj0)
self.obj0.destroyed.connect(lambda: print('obj0被销毁'))
obj1.destroyed.connect(lambda: print('obj1被销毁'))
obj2.destroyed.connect(lambda: print('obj2被销毁'))
# del obj1 # obj1被obj2引用,通过这种方式删除不了
'''以后删除对象就要用deleLater(),对象不是立即删除,而是下一次循环之后才销毁,所以deleLater()下面的语句也会执行'''
# 释放的时候,会解除对象父子关系,也就是obj0,obj2不再是obj1的父子
obj1.deleteLater()
# 手动销毁父对象, 当父对象被销毁时子对象自动销毁
# del self.obj0
示例1
obj = QObject() # 绑定事件 obj.destroyed.connect(lambda o: print(o, '对象已被销毁!!')) obj.objectNameChanged.connect(lambda new_name: print('对象名称已改变,名称为:', new_name)) obj.objectNameChanged.connect(lambda new_name: print('绑定的第2个函数已被执行:', new_name)) # 发生事件 obj.setObjectName('root') # 解绑,会触发事件,但与槽失去连接,不执行事件函数 obj.objectNameChanged.disconnect() # 临时阻断信号连接 obj.blockSignals(True) obj.setObjectName('obj1') # 恢复信号连接 obj.blockSignals(False) obj.setObjectName('obj2') # 获取是否临时阻断了连接 print(obj.signalsBlocked()) # 获取某个信号连接了几个槽函数 print(obj.receivers(self.obj.objectNameChanged)) # 触发销毁事件 -> 这里会在obj.signalsBlocked()前执行, 抛出异常 del obj
示例2
# 每次修改主窗口标题都会显示'Hello-新标题'
def name_change_func(title):
self.blockSignals(True) # 暂时阻断信号,防止无限递归
self.setWindowTitle('Hello,{}!'.format(title))
self.blockSignals(False) # 重连信号,保证修改多次title也可以正常实现功能
self.windowTitleChanged.connect(name_change_func)
self.setWindowTitle('lzc')
self.setWindowTitle('zs')
事件处理机制相对于信号与槽,更加低级、偏向于底层
import sys from PyQt5.Qt import QEvent, QObject from PyQt5.QtWidgets import * class MyApp(QApplication): def notify(self, receiver, evt): if evt.type() == QEvent.MouseButtonPress: print("receiver: {}, evt: {}".format(receiver, evt)) return super().notify(receiver, evt) class MyButton(QPushButton): def event(self, evet): if evet.type() == QEvent.MouseButtonPress: print(evet) return super().event(evet) def mousePressEvent(self, *args, **kwargs): print('鼠标在子函数中被按下...') return super().mousePressEvent(*args, **kwargs) if __name__ == '__main__': app = MyApp(sys.argv) root = QWidget() root.resize(500, 300) root.move(400, 400) btn = MyButton(root) btn.setText('按钮') btn.move(100, 100) btn.pressed.connect(lambda: print('按钮被点击了...')) root.show() sys.exit(app.exec_())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。