zoukankan      html  css  js  c++  java
  • 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_())

  • 相关阅读:
    基于 Android NDK 的学习之旅-----序言
    音乐播放时跳动的音符
    WebView中实现文件下载功能
    Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单
    android webview中的音乐的暂停与播放
    Android 使用Fragment界面向下跳转并一级级返回
    Fragment使用LocalBroadcastManager接收广播消息
    android WebView总 结
    解决方式:QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
    Android学习十九:ContentProvider初步
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10652956.html
Copyright © 2011-2022 走看看