zoukankan      html  css  js  c++  java
  • pyqt的setObjectName()/findChild()

    根据设置的Name标示查找组件的对象,关键函数:setObjectName()/findChild()

    findChild()/2:需要两个参数,

      参数一:组件的类型,如QLineEdit、QPushButton。

      参数二:setObjectName()设置的Name标示。

    个人注解:

      背景描述:

        目前属于初级阶段,各种了解都不太全面。

      场景描述:

            一个widget容器(视为parent)通过设置layout添加了很多组件,比如button,input,

          通过设置parent.button_1,parent.input_2保存对象,容器中的组件多了很乱的,比如某个事件触发了需要获取多个input.text(),

          现阶段掌握的知识只能通过parent.input_1.text()、parent.input_2.text()、parent.input_3.text()获取.

    改进方案:

      ①、如果能建立各个组件的Name标示和组件的类型的映射关系,则可直接通过findChild(map_nameId_type,nameId)找到组件。

      ②、直接建立组件对象NameId和组件对象的映射,map(key-value),只占用widget的自定义子类的类型为dictionary一个属性,

                      (在写方案①的时候想到的,原始方案太挫了、、、、突然有点喜欢上python的弱类型,Java的强类型的思维模式习惯了)

    from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QHBoxLayout, 
                                            QLineEdit)
    from PyQt5.QtGui import *  
    from PyQt5.QtCore import *  
    import sys  
    
    
    def clickHandle():
        #button = main.sender()
        #print(button.objectName())
        
        array = []
        array.append(QLineEdit)
         #根据名字获取组件
        obj = main.findChild(array[0],"edit_1")
        print(type(obj))
        print(isinstance(obj, QLineEdit))
        print(isinstance(obj, array[0]))
        
        print(main.findChild(array[0],"edit_1").text())
       
        print(main.findChild(QLineEdit,"edit_1").text())
        print(edit_1.text())
    
    
    if __name__ == '__main__':                   
        app=QApplication(sys.argv)  
        main=QWidget()  
        
        latout = QHBoxLayout()
        main.setLayout(latout)
        
        but_1 = QPushButton('but_1')
        but_1.setObjectName('but_1')
        but_1.clicked.connect(clickHandle)
        but_2 = QPushButton('but_2')
        but_2.setObjectName('but_2')
        but_2.clicked.connect(clickHandle)
        
        edit_1 = QLineEdit()
        edit_1.setObjectName('edit_1')
        
        edit_2 = QLineEdit()
        edit_2.setObjectName('edit_2')
        
        latout.addWidget(but_1)
        latout.addWidget(but_2)
        
        latout.addWidget(edit_1)
        latout.addWidget(edit_2)
        
        main.show()  
        app.exec_()
    

    方案②、

    from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QHBoxLayout, 
                                            QLineEdit)
    from PyQt5.QtGui import *  
    from PyQt5.QtCore import *  
    import sys  
    
    
    def clickHandle():
        #button = main.sender()
        #print(button.objectName())
        
        array = []
        array.append(QLineEdit)
         #根据名字获取组件
        obj = main.findChild(array[0],"edit_1")
        print(type(obj))
        print(isinstance(obj, QLineEdit))
        print(isinstance(obj, array[0]))
        
        print(main.findChild(array[0],"edit_1").text())
       
        print(main.findChild(QLineEdit,"edit_1").text())
        print(edit_1.text())
        print(array_obj[2].text())
        print(array_obj[3].text())
    
    
    if __name__ == '__main__':                   
        app=QApplication(sys.argv)  
        main=QWidget()  
        
        array_obj = []
        latout = QHBoxLayout()
        main.setLayout(latout)
        
        but_1 = QPushButton('but_1')
        but_1.setObjectName('but_1')
        but_1.clicked.connect(clickHandle)
        but_2 = QPushButton('but_2')
        but_2.setObjectName('but_2')
        but_2.clicked.connect(clickHandle)
        
        array_obj.append(but_1)
        array_obj.append(but_2)
        
        edit_1 = QLineEdit()
        edit_1.setObjectName('edit_1')
        
        edit_2 = QLineEdit()
        edit_2.setObjectName('edit_2')
    
        array_obj.append(edit_1)  
        array_obj.append(edit_2)
      
        latout.addWidget(but_1)
        latout.addWidget(but_2)
        
        latout.addWidget(edit_1)
        latout.addWidget(edit_2)
        
        main.show()  
        app.exec_()
    
  • 相关阅读:
    GeoServer 2.2 正式版发布,GIS 服务器
    Spring Shell 1.0.0.RC1 发布
    微软发布支持Windows Desktop和F#的Visual Studio Express版本
    XINS 3.0 正式版发布,远程 API 调用规范
    YUI 3.7.2 补丁版发布
    HTML5 Boilerplate 4:改进了Apache配置和图片替换技术,并采用MIT许可证
    解决Windows Phone平台上不能枚举工程自带资源的问题
    截短 UTF8 字符串
    Spring Data Neo4j 2.1.0 RC4 发布
    GTK+ 3.5.18 发布,GUI 开发工具包
  • 原文地址:https://www.cnblogs.com/ribavnu/p/4674095.html
Copyright © 2011-2022 走看看