pyqt的setObjectName()/findChild()

简介: 根据设置的Name标示查找组件的对象,关键函数:setObjectName()/findChild()   findChild()/2:需要两个参数,   参数一:组件的类型,如QLineEdit、QPushButton。

 

根据设置的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_()

 

相关文章
|
4月前
|
机器学习/深度学习 算法 Linux
Yolov5水果分类识别+pyqt交互式界面
Yolov5水果分类识别+pyqt交互式界面
|
4月前
|
开发框架 开发者 Python
探索Python GUI编程:从Tkinter到PyQt的全方位使用
在当今技术发展日新月异的时代,Python作为一种简洁高效的编程语言,拥有广泛的应用领域。其中,GUI(图形用户界面)编程是Python开发者经常涉足的领域之一。本文将介绍两个常用的Python GUI库——Tkinter和PyQt,并深入探讨其使用方法、特点以及适用场景,帮助读者全面了解Python GUI编程的魅力。
|
4月前
|
Python
PyQt绘制股票K线多图Y坐标对齐
PyQt绘制股票K线多图Y坐标对齐
162 0
|
10月前
|
Python
pyqt 重写关闭窗口事件代码
pyqt 重写关闭窗口事件代码
71 0
|
4月前
|
数据可视化 Linux C++
Python GUI编程:Tkinter与PyQt的选择
Python作为一门流行的编程语言,在GUI编程领域也有着非常强大的工具。其中,Tkinter和PyQt是两个备受推崇的GUI库。本文将介绍这两个库的优缺点,并帮助读者决定应该选择哪一个。
|
4月前
|
前端开发 Python
【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能
【Python • 项目实战】pytesseract+pyqt实现图片识别软件小项目——(二)实现QQ截图功能
180 0
|
30天前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
55 1
|
1月前
|
数据可视化 Linux API
Tkinter与PyQt的对比
【8月更文挑战第3天】本文对比了Python中两大GUI工具包Tkinter与PyQt。Tkinter作为Python标准库的一部分,易于学习且轻量级,适合快速开发简单的跨平台GUI应用。PyQt功能强大且灵活,支持复杂应用的开发,更适合有经验的开发者。通过示例代码展示了如何使用这两种工具包创建基本的GUI应用及图像查看器,帮助读者理解它们的不同之处。选择哪个工具包取决于项目的具体需求、开发者的经验以及对功能和性能的要求。
64 4
|
4月前
|
Python
PyQt---------信号与槽函数的关系
PyQt---------信号与槽函数的关系
76 1
|
4月前
|
Python
PyQt中资源文件的使用(详细步骤介绍)
PyQt中资源文件的使用(详细步骤介绍)
160 1