You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6:如何获取QTableWidget单元格中QLineEdit的信号

解决QTableWidget中QLineEdit的textEdited信号无法触发的问题

问题说明

在QTableWidget的单元格中嵌入QLineEdit后,尝试连接textEdited信号但未触发预期响应。代码里lineEdit.textEdited[str].connect(self.TestCellLineEdited)的写法看似正确,但实际没有效果。

问题原因

  1. textEdited信号的触发规则:该信号仅在用户手动编辑文本时触发,通过setText()设置初始文本不会触发此信号。
  2. 判断逻辑的矛盾:你的TestCellLineEdited方法中仅当输入文本等于初始值"Hello"时才打印,但用户编辑时文本必然会偏离这个初始值,导致永远不会触发打印逻辑。

修正后的代码

import sys
from PySide6 import QtWidgets
from PySide6.QtCore import QRect
from PySide6.QtWidgets import QTableWidget, QTableWidgetItem

class Ui_Form(object):
    def setupUi(self, Form):
        Form.resize(400, 300)
        self.tableWidget = QTableWidget(Form)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setRowCount(4)
        self.tableWidget.setGeometry(QRect(50, 60, 256, 192))
        self.tableWidget.setHorizontalHeaderLabels(['Parameters', 'Values'])

class MainWindow(QtWidgets.QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)  # 优化:直接调用继承的setupUi,无需重复实例化Ui_Form

        self.tableWidget.itemClicked.connect(self.TestCellClick)

        for row in range(4):
            item = QTableWidgetItem(f"Label{row}")
            self.tableWidget.setItem(row, 0, item)

            lineEdit = QtWidgets.QLineEdit()
            lineEdit.setText("Hello")
            # 若需捕捉所有文本变化(包括初始设置),改用textChanged信号
            # lineEdit.textChanged[str].connect(self.TestCellLineEdited)
            # 若仅捕捉用户手动编辑,保留textEdited,调整判断逻辑
            lineEdit.textEdited[str].connect(self.TestCellLineEdited)
            self.tableWidget.setCellWidget(row, 1, lineEdit)

    def TestCellClick(self, item: QTableWidgetItem):
        if item.column() == 0:
            return

    def TestCellLineEdited(self, text: str):
        # 调整判断逻辑,比如打印当前编辑的文本
        print(f"编辑后的文本:{text}")
        # 若需要判断初始值被修改,可改为:
        # if text != "Hello":
        #     print("文本已修改")

关键要点

  • 信号选择:
    • textEdited:仅响应用户手动编辑操作,适合捕捉用户交互产生的文本变化。
    • textChanged:只要文本内容发生变化就触发(包括setText()设置初始值、代码修改文本等),适合需要监听所有文本变更的场景。
  • 判断逻辑匹配:确保信号触发后的处理逻辑与需求一致,避免因条件过于苛刻导致无响应。

内容的提问来源于stack exchange,提问作者Digilee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:27:28