博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyqt的setObjectName()/findChild()
阅读量:7251 次
发布时间:2019-06-29

本文共 3337 字,大约阅读时间需要 11 分钟。

 

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

 

转载地址:http://abebm.baihongyu.com/

你可能感兴趣的文章
VueJs开发笔记—IDE选择和优化、框架特性、数据调用、路由选项及使用
查看>>
MySQL 数据库的备份与恢复
查看>>
Android中的设计模式之单例模式
查看>>
使用Cordova将您的前端JavaScript应用打包成手机原生应用
查看>>
用Python玩转微信
查看>>
Bootstrap 小结
查看>>
《JavaScript权威指南》——JavaScript核心
查看>>
C语言 时间函数的学习
查看>>
你真的懂Redis事务吗?
查看>>
收藏 | 12个ggplot2拓展程序助你强化R可视化
查看>>
1-Linux C语言编程基本原理与实践-学习笔记
查看>>
WRF-DA代码编译与安装(二)——WRF-DA模块的编译与安装
查看>>
2018年美团Android校招
查看>>
Spring消息之WebSocket
查看>>
Java 文件流操作.
查看>>
《11招玩转网络安全》之第三招:Web暴力破解-Low级别
查看>>
Eclipse快捷键大全
查看>>
Android实现TextView字符串波浪式跳动
查看>>
NumPy—random随机数生成函数总结
查看>>
第10章节-Python3.5-Django路由分发
查看>>