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文 ...
随机推荐
- NodeJS操作Redis实现消息的发布与订阅
首先先说一下流程: 1.保存数据到Redis,然后将member值publish到 chat频道(publish.js功能) 2.readRedis.js文件此前一直在监听chat频道,readRed ...
- How to kill a process on a port on linux 怎么杀死 关掉一个端口
sudo kill `sudo lsof -t -i:9001`
- [hihoCoder] 骨牌覆盖问题·二
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?所以我们的题目是:对于3xN的棋盘 ...
- ev3dev:设置自动登录wifi
ev3有时系统不能自动输入wifi密码,在ev3主机上按来按去太麻烦了.看了下官网,解决方案如下: 主要是利用工具:connmanctl,这是一个交互式工具. robot@ev3dev:~$ sudo ...
- WCF教程网址
http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html http://www.cnblogs.com/artech/ar ...
- Java反射机制在Spring IOC中的应用
反射的定义: 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取它所有的成员变量和方法并且显示出来. 反射机制的 ...
- 《解读window核心编程》 之 字符和字符串处理方式
推荐的字符和字符串处理方式 開始将文本字符串想象为字符的数组,而不是 char 或字节的数组. 用通用数据类型(如 TCHAR/PTSTR )来表示文本字符和字符串. 用明白的数据类型(如 BYTE ...
- nyoj123 士兵杀敌(四)树状数组 插线问点
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- SQLAlchemy的“缓存”问题导致的BUG
问题描述: 最近做项目,遇到一个问题,两个项目操作同一个数据库,其中A项目用的pymysql链接操作数据库,B项目用的sqlalchemy,当我请求B项目中的一个接口,会通知A项目操作数据库,然后返回 ...
- Uboot的bad_save_user_regs
下面是一个宏定义,从名字“bad_save_user_regs”就可以猜测它是用来保存程序“出错”时用户态的寄存器的值. 从下面的“use bad_save_user_regs for abort/p ...