python-Qt的多个QLineEdit和QComboBox分别绑定同一个槽时的信息获取

2023-05-16

这个标题可能会有点容易让人弄错,我只不过是想把QLineEdit和QComboBox的绑定处理放在同一标题可能容易让人看错,我只不过是想把QLineEdit和QComboBox的问题放在一篇文章中而已,所以意思是说多个QLineEdit绑定到一个槽函数,多个QComboBox绑定到另外一个槽函数,它们当然是分别处理的。

由于QLineEdit和QComboBox的槽函数形式不一样,所以也是必需分开的,另外还有它们获取内容的方式也不一样,也当然应该是分开说才是对的。

好了,开始言归正传。

不习惯python的语言方式,虽然很灵活,但是看到一个变量无法确定它具体是什么东西,就没有办法很直观地了解它的结构,还有Qt,没有设计界面,只能写代码,确实不太习惯。

一个工具,通过配置文件,允许添加多个输入框和多个下拉选择框,创建这些控件没有问题,下面针对输入框和下拉框分别说明。

先说明一下,下面的代码都是放在一个类中的,所以每个函数的第一个参数都是self。

在此只针对问题的相关情况进行说明,至于界面显示和排版,不在此文的范围内,所以这里就只说问题点及其处理方法。先来段小代码:

def InitUi(self, infoList):
    self.editList = []
    editIndex = 0
    for infoItem in infoList:
        objInput = QLineEdit()
        if infoItem[1] != "":
            objInput.setText(infoItem[1])
        self.editList.append(objInput)

这个很简单,根据输入的infoList创建个数不定的QLineEdit控件,每项中,如果存在值,就把它的值显示在输入框中,所有的输入框加入到控件列表editList中。但这个代码中没有绑定槽函数,为了在完成编辑后及时获取输入的值,我这里采用了 editingFinished 信号,在内容有修改然后失去焦点时,或者按下回车时,将会触发此信号,修改后的代码如下:

def InitUi(self, infoList):
    self.editList = []
    editIndex = 0
    for infoItem in infoList:
        objInput = QLineEdit()
        if infoItem[1] != "":
            objInput.setText(infoItem[1])
        objInput.editingFinished.connect(partial(BoxEditKillFocus, editIndex))
        self.editList.append(objInput)
        editIndex += 1


def BoxEditKillFocus(self, editIndex):
    val = self.sender.text()

这里在绑定的时候,采用了一个偏置函数partial,目的是多一个参数把输入框的索引传进去,因为在我实际的项目中,本文章的代码是在父类中,实际处理的槽函数在子类中,而且输入框在排版中被包含到了多个层级内,我就没有单独把它放到一个列表中,所以这个索引仅用于业务上的联系,而不是专门来和输入框控件去对应的(当然,通过把输入框像在本文中加入一个单独的列表,然后通过索引来确定对应的输入框也是一个方法)。

通过网上搜索,说在槽函数中通过sender可以获取输入值,就像上面那样,但我实际测试时程序是崩溃的,无法获取,sender的函数我也换了几个:text()、getText()、Text()几个都试了,一样崩溃,也就是说,这个sender应该不是输入框自己的实例。如果是这样就有点麻烦,但是转念一想,既然可以把索引传入槽函数,那直接把输入框自己也传进去不就行了?

def InitUi(self, infoList):
    self.editList = []
    editIndex = 0
    for infoItem in infoList:
        objInput = QLineEdit()
        if infoItem[1] != "":
            objInput.setText(infoItem[1])
        objInput.editingFinished.connect(partial(BoxEditKillFocus, editIndex, objInput))
        self.editList.append(objInput)
        editIndex += 1


def BoxEditKillFocus(self, editIndex, objInput):
    val = objInput.text()

这样一试,果然成功,槽函数中,val就是获取的输入内容

下面再说下拉选择框,由于其槽函数直接有当前选中的值,所以比输入框就简单一些,不需要把自己怕实例传入,下面简单贴上实现的代码:

def InitUi(self, infoList):
    self.cbbList = []
    cbbIndex = 0
    for infoItem in infoList:
        objInput = QComboBox()
        objInput.setText(infoItem[1])
        objInput.currentIndexChanged.connect(partial(BoxSelected, cbbIndex))
        self.cbbList.append(objInput)
        cbbIndex += 1


def Boxselected(self, cbbIndex, curVal):
    outString("cbb index is " + str(cbbIndex) + ", value index is " + str(curVal))

在这里,同样把控件的索引当做参数也传进了槽函数,但槽函数中的最后一个参数curVal,是槽函数自带的,也就是当前选中的项的索引。

总体上在同一个被绑定的槽函数中想获取不同控件输入的值有几种方法:

1. 把控件加入列表,在绑定时通过使用偏置函数把控件索引传进槽函数,在槽函数中通过控件索引直接找到是哪一个控件,这样就能直接获取输入的内容了
2. 在绑定时通过使用偏置函数把控件自己的实例传进槽函数,在槽函数中直接通过此控件的实例获取输入的内容

可能还有网上说的通过sender来获取,但我没有去研究,应该也是可行的,只是我不知道如何写罢了

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-Qt的多个QLineEdit和QComboBox分别绑定同一个槽时的信息获取 的相关文章

  • 2021-03-19

    输出 数字直角三角形 1 2 3 4 5 6 7 8 9 10 11 12 可根据需要增加行数 public class trangle 64 param args public static void main String args T
  • 2021-03-19

    switch语句实现成绩选择 注意强制转换 import java util Scanner public class Grade Switch 64 param args public static void main String ar
  • 2021-04-03

    Java代码 importjava util Scanner public classTest public static voidmain String args p br Scanner scan 61 newScanner Syste
  • 2021年寒假

    2022年1月4日 周二 雨雪 主要内容 xff1a 测试学校周雄短路的板子 xff0c 焊接新板子 上午11 00开始 xff0c 首先准备好电源 xff0c 热风枪 xff0c 前一天晚上已经改完的板子 第一次上电 测得最终输出5v 1
  • JavaScript 异步编程

    异步的概念 异步 xff08 Asynchronous async xff09 是与同步 xff08 Synchronous sync xff09 相对的概念 在我们学习的传统单线程编程中 xff0c 程序的运行是同步的 xff08 同步不
  • InnoDB引擎--存储结构与文件

    数据库是数据的集合 xff0c 数据库管理系统 xff08 DBMS xff09 是操作和管理数据库的应用程序 数据库应用主要有两类 xff1a OLAP xff08 联机分析处理 xff09 和OLTP xff08 联机事务处理 xff0
  • conda安装包出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url问题

    win10本地利用conda install package时出现的问题 Fetching package metadata CondaHTTPError HTTP 000 CONNECTION FAILED for url lt http
  • NVM 切换Node版本不成功(nvm提示成功,实际Node版本未切换)

    一 背景 xff1a 因为接手了一个旧项目 xff0c node依赖版本对应不上 xff0c 于是想到用NVM切换下对应版本 xff0c 二 问题 xff1a xff08 先安装Node xff0c 后安装Nvm下 xff09 由于以前就安
  • STM32F103C8T6读取气压计MS5611,I2C读取模式

    笔者最近想用气压计模块来测一下相对高度 xff0c 使用的元器件如下图所示 所使用的最小系统板 所使用的气压计模块 其实读取还是蛮简单的 xff0c 根据核心板引脚图选择I2c接口 xff0c 然后借鉴正点原子的模拟i2c程序 xff0c
  • Linux(Ubuntu20.04)安装JDK

    简单易懂 xff0c 小学生都学会了 xff01 操作系统 xff1a Windows11 子系统 xff1a Linux xff08 Ubuntu20 04 xff09 JDK版本 xff1a openjdk8 前言 最近手痒了 xff0
  • Spring自定义AOP

    我们在学习Spring的时候 xff0c 总是会看到Spring对于AOP的支持 xff0c 这同IOC一起 xff0c 属于Spring的两大核心 既然是核心 xff0c 这AOP又有哪些应用场景呢 xff1f 相信很多小伙伴都知道 xf
  • Spring Boot全局异常处理

    前言 全局异常处理可以帮助我们拦截接口的报错 xff0c 返回调用方友好的提示 xff0c 提高了用户体验的同时 xff0c 还为我们排查异常提供了便利 那么如何定义一个全局异常处理呢 xff1f 它又是怎样帮助我们处理异常 xff0c 并
  • MySQL查询JSON字段匹配

    前言 MySQL从5 7版本开始 xff0c 引入了JSON类型字段 xff0c 这使我们可以在MySQL数据库中存储JSON格式的数据 xff0c 并保留其对象格式 xff0c 再也不用转成字符串类型保存了 xff0c 减少了许多字符串类
  • 常用的conda命令

    目录 一 conda vs pip 二 conda命令 1 conda list 2 conda install 3 conda remove 4 conda update 5 conda create 6 conda config 7 c
  • 借助ChatGPT编写html小程序

    在数值模拟过程中 xff0c 经常需要反复计算一些参数 xff0c 例如常见的无量纲参数雷诺数和瑞利数等 它们的表达式如下 xff1a R a 61 g
  • 云数据库MySQL的选择

    架构介绍 xff1a 云数据库MySQL支持四种架构 xff1a 高可用版 金融版 单节点高IO版 基础版 其中单节点高IO版的只用于只读 版本对比 xff1a 企业级别 xff0c 刚刚好公司没有自己的服务器机房的时候可以做对比选择 一般
  • 查遍全网目前最有效解决办法:Module build failed: BrowserslistError: Unknown browser query `dead`

    今天偶然间项目编译打不开了 xff0c 满篇如下错误 xff0c 网上找遍让配置一点用没得卡球一天找遍全网 xff0c 方案都无效都是配置browserslist browserslist 34 34 production 34 34 gt
  • 使用Win32 Disk Imager烧录镜像到U盘

    使用Win32 Disk Imager烧录镜像到U盘 Win32 Disk Imager是一款非常好用的Win32 磁盘映像工具 利用这款工具 xff0c 我们可以把img文件快速写入到U盘 SD卡等USB设备中 xff0c 并且它不会改变
  • js响应事件的阶段,捕获阶段,冒泡阶段

    当鼠标点击所看到的的按钮时 xff0c 其实发生了一系列的事件传递 xff0c 可以想象一下 xff0c button实际上是被body 包裹 起来的 xff0c body是被html 包裹 起来的 xff0c html是被document
  • ROS(3)订阅者subscriber编程实现

    cd testROS ws src topic publisher src 创建代码pose subscriber cpp 该例程将订阅 turtle1 pose话题 xff0c 消息类型turtlesim Pose include lt

随机推荐