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_()
pyqt的setObjectName()/findChild()的更多相关文章
- Pyqt+QRcode 生成 识别 二维码
1.生成二维码 python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳 一.python-qrcode介绍 python-qrco ...
- Pyqt 屏幕截图工具
从Pyqt的examples中看到一段截图代码, (路径:examplas\desktop\screenshot.py) 所以想自己UI下界面,手动练习下 通过UI生成的: Screenshot.py ...
- Pyqt Smtplib实现Qthread多线程发送邮件
一. smtplib 的介绍 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) SMTP类构造函数,表示与SMTP服务器之间的连接 ...
- Pyqt QSystemTrayIcon 实现托盘效果
pyqt的托盘效果很好实现,在Pyqt的demo中有个例子 路径:PyQt4\examples\desktop\systray.py 今天我就仿这个Tray效果做效果 一. 创建UI trayicon ...
- Pyqt 音视频播放器
在寻找如何使用Pyqt做一个播放器时首先找到的是openCV2 openCV2 貌似太强大了,各种关于图像处理的事情它都能完成,如 读取摄像头.图像识别.人脸识别. 图像灰度处理 . 播放视频等,强 ...
- Pyqt 打开外部链接的几种方法
Pyqt 触发一个事件,打开外部链接,我找到了这个方法,供大家参考 1. QDesktopServices 的openUrl 方法 QtGui.QDesktopServices.openUrl(QtC ...
- Pyqt QListWidget 展示系统环境变量
今天学习了下Pyqt的 QListWidget 控件 我们先看下这个图片 这张图片就是典型的listWidget效果,我们今天就仿这样布局新建个ListWidget 在网上找了个关于QListWidg ...
- Pyqt 中__init__(self,parent==None) parent理解
参考: 在PyQt中,所有class都是从QObject派生而来,QWidget对象就可以有一个parent.这种parent-child关系主要用于两个方面: 没有parent的QWidget类被认 ...
- Pyqt 打包资源文件
用打包工具将做好的Pyqt程序打包成exe后发现引用的资源图片都显示不了? 是否遇到了和我一样的问题呢.google之后找到了方法,一种方法是在程序中引用外部资源,另外一种方法是将资源文件转换为py文 ...
随机推荐
- 多主机共享ssh Public/Private Key
前期服务器比较少,所有代码都放在github的私库中,在自己的github 设置中设置SSH keys就可以拉下相应的库中的代码到本地与服务器了,但是最近服务器多家了几台,每台都生成key加到gith ...
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
一.发现问题 先看两种方法插入数据 public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db ...
- 如何用adb抓取log?
在Androidclient的測试过程中,有时候我们会遇到闪退等异常情况. 这时我们能够通过adb抓取log.从而给开发提供很多其它信息. 一.下载ADB.exe 在网上搜索"adb ...
- Spring Boot 2.0 Intellij Idea 中图文详解打包成可执行Jar
我们使用Spring Boot 2.0 创建好我们的项目后,我们一般需要打包,然后部署到服务器上. 打包步骤: 1. 选中项目,右键——> Open Module Settings. 2. 切换 ...
- [na]小区网络-pppoe拨号认证原理及部署(panabit来管理)
以前搞网络时候,对小区宽带adsl上网(后ie中的pppoe拨号config)+对一坨人限速的系统(panabit)比较感兴趣,挺神秘. 以前写的,有些纰漏,抽时间我会陆陆续续补充下. PPPOE认证 ...
- 源码安装natcat
下载源码包:http://netcat.sourceforge.net/download.php # tar -xzvf netcat-.tar.gz [root@znode02 netcat-]# ...
- 安卓测试之---Monkey
Tip:在阅读此篇之前,请先了解ADB命令: http://www.cnblogs.com/pearl07/p/8572390.html 一.什么是Monkey Monkey是Android SDK提 ...
- jsoup解析网页出现转义符问题
https://www.oschina.net/question/996055_136438 *************************************** 我要解析这个网页 htt ...
- kafka之partition分区及副本replica升级
修改kafka的partition分区 bin/kafka-topics.sh --zookeeper datacollect-2:2181 --alter --partitions 3 --topi ...
- 第一个struts程序的配置过程
然后输入project-name,比如说“test",点finish,配置web.xml,这里的org.apache.struts.action.ActionServlet就在struts- ...