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

pyqt的setObjectName()/findChild()的更多相关文章

  1. Pyqt+QRcode 生成 识别 二维码

    1.生成二维码 python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳 一.python-qrcode介绍 python-qrco ...

  2. Pyqt 屏幕截图工具

    从Pyqt的examples中看到一段截图代码, (路径:examplas\desktop\screenshot.py) 所以想自己UI下界面,手动练习下 通过UI生成的: Screenshot.py ...

  3. Pyqt Smtplib实现Qthread多线程发送邮件

    一. smtplib 的介绍 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接 ...

  4. Pyqt QSystemTrayIcon 实现托盘效果

    pyqt的托盘效果很好实现,在Pyqt的demo中有个例子 路径:PyQt4\examples\desktop\systray.py 今天我就仿这个Tray效果做效果 一. 创建UI trayicon ...

  5. Pyqt 音视频播放器

    在寻找如何使用Pyqt做一个播放器时首先找到的是openCV2 openCV2 貌似太强大了,各种关于图像处理的事情它都能完成,如 读取摄像头.图像识别.人脸识别.  图像灰度处理 . 播放视频等,强 ...

  6. Pyqt 打开外部链接的几种方法

    Pyqt 触发一个事件,打开外部链接,我找到了这个方法,供大家参考 1. QDesktopServices 的openUrl 方法 QtGui.QDesktopServices.openUrl(QtC ...

  7. Pyqt QListWidget 展示系统环境变量

    今天学习了下Pyqt的 QListWidget 控件 我们先看下这个图片 这张图片就是典型的listWidget效果,我们今天就仿这样布局新建个ListWidget 在网上找了个关于QListWidg ...

  8. Pyqt 中__init__(self,parent==None) parent理解

    参考: 在PyQt中,所有class都是从QObject派生而来,QWidget对象就可以有一个parent.这种parent-child关系主要用于两个方面: 没有parent的QWidget类被认 ...

  9. Pyqt 打包资源文件

    用打包工具将做好的Pyqt程序打包成exe后发现引用的资源图片都显示不了? 是否遇到了和我一样的问题呢.google之后找到了方法,一种方法是在程序中引用外部资源,另外一种方法是将资源文件转换为py文 ...

随机推荐

  1. 深入理解 Session 与 Cookie

    Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...

  2. 4X4矩阵键盘扫描程序

    4X4矩阵键盘扫描: 1. 4根行线的GIO均设为Output,根列线的GIO均设为Input: 2. 4根行线的GIO分别置为0111.1011.1101.1110,读逐一读取列线GIO的值,可确定 ...

  3. Direct-X学习笔记--三维摄像机

    一.介绍 哇! 到了传说中的3D摄像机啦! 之前我们写的东东,都是观察点不动,通过世界变换让东西动,今天,通过三维摄像机我们就能够改变我们的观察点,观察方向,任意在三维空间中驰骋.之前我们所设定的视角 ...

  4. Linux下查看Raid磁盘阵列信息的方法

    Linux下查看软.硬raid信息的方法. 软件raid:只能通过Linux系统本身来查看 cat /proc/mdstat 可以看到raid级别,状态等信息. 硬件raid: 最佳的办法是通过已安装 ...

  5. 学习笔记之gethostbyname函数

    我们现在认知一台计算机主机通常采用直观可读的名字.例如博客园我们会记住 www.cnblogs.com 而不是记住42.121.252.58这个IP.对于大多数的应用程序来说应该是处理名字而不是处理地 ...

  6. jvisualvm工具使用

    VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe). https:// ...

  7. nrm 的使用

    我们介绍过cnpmjs.org和淘宝 npm 两个 NPM 镜像.除此之外,还有一些国外的 NPM 镜像.不同地区访问不同的镜像速度可能有差异,因此有时候需要切换 NPM 镜像.相比每次切换时都手动指 ...

  8. java 生成泛型的参数的实例 T t=new T()

    方法1 ParameterizedType ptype = (ParameterizedType) this.getClass().getGenericSuperclass(); Class claz ...

  9. GPIO实验(二)

    =============第三个实验============用c语言轮流点亮3个LED=================== 1.crt0.S.text.global _start_start:    ...

  10. Entity Framework4.3安装以及错误(基础连接已经关闭:未能为SSL/TLS……)问题解决!

    Entity Framework以下简称EF 安装EF4.3的步骤是首先安装VS扩展 NuGet,然后再使用NuGet安装EF程序包 安装完NuGet就可以安装EF了,有两种方式可以安装EF: 1.使 ...