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_()
时间: 2024-10-12 21:03:15

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

PYQT设计无边框窗体

#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try:    _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:    _fromUtf8 = lambda s: s class Ui_Form(object):    def setupUi(self, Form):        Form.setObject

python窗体——pyqt初体验

连续两周留作业要写ftp的作业,从第一周就想实现一个窗体版本的,但是时间实在太短,qt零基础选手表示压力很大,幸好又延长了一周时间,所以也就有了今天这篇文章...只是为了介绍一些速成的方法,还有初学者会遇到的问题... 这里先介绍一个安装连接,一条龙服务,各种安装配置在这里都找得到:http://blog.sina.com.cn/s/blog_4c18e3160101a12g.html 什么是pyqt? 简而言之,qt是一个开发窗体程序的模块,原本是是C++的库,PyQt是Python的移植版本

PYQT窗口居中

#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try:    _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:    _fromUtf8 = lambda s: s class Ui_Form(object):    def setupUi(self, Form):        Form.setObject

PYQT窗口托盘目录

#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui try:    _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:    _fromUtf8 = lambda s: s class Ui_Form(object):    def setupUi(self, Form):        Form.setObjec

PyQt中如何结合Qt设计师进行开发

t设计师是Qt的所见即所得的界面设计工具,通过拖拉方式设计界面,但它并不能产生任何代码. Qt设计师使用.ui后缀的XML文件来存储界面内容.通过pyuic4命令可以编译成.py文件,.py文件的内容就和我们手写界面的类似. 当然直接使用.ui文件也是可以的,但是有两个问题,一个是效率不高,需要在运行时做动态转换创建界面:二是不方便打包发布.这里只讲最佳实践,不讲这种方式,感兴趣的可以自己研究.我后面会写文章讲解. 下面通过一个例子,讲述如何创建界面,并编译,以及如何使用信号和槽.该例子上有一个

Pyqt+QRcode 生成二维码

python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳 一.python-qrcode介绍 python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块和 qrcode 库. PIL下载地址: https://pypi.python.org/pypi/PIL/1.1.6         或 http://www.pythonware.com/products/pil/ qrcode下载地址: https:

Pyqt QListWidget 展示系统环境变量

今天学习了下Pyqt的 QListWidget 控件 我们先看下这个图片 这张图片就是典型的listWidget效果,我们今天就仿这样布局新建个ListWidget 在网上找了个关于QListWidget的基础关系图: 官网对QListWidget的描述: The QListWidget class provides an item-based list widget. QListWidget is a convenience class that provides a list view si

pyqt中使用matplotlib绘制动态曲线 – pythonic

一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟,每一秒钟绘制一个点,X轴长度超过1分钟,则左移1秒刻度,实现动态效果 2)Y轴显示随机变化的数值,1-100 三.准备工作 1环境:python3.3,eric5,pyqt4 四.开始动手 : 使用Eric创建新项目: 在设计编码前期主要用到Eric的两个窗口:源码和窗体浏览器,类似delphi.

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

Pyqt 触发一个事件,打开外部链接,我找到了这个方法,供大家参考 1. QDesktopServices 的openUrl 方法 1 QtGui.QDesktopServices.openUrl(QtCore.QUrl('http://www.hao123.com')) 2.Python 自带的webbrowser 浏览器控制模块 webbrowser提供了三种方法 1 import webbrowser 2 webbrowser.open(url, new=0, autoraise=True