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

PyQt5技术问题:如何获取循环生成的多个QTextEdit内容

解决PyQt5中获取动态创建的所有QTextEdit内容的问题

问题出在你创建文本框的逻辑里:循环中每次都用self.enter_nbcond这个变量覆盖之前的QTextEdit实例,最终这个变量只会指向最后一个创建的文本框,所以调用self.enter_nbcond.toPlainText()只能拿到最后一个的值。

解决思路是用一个列表来存储所有动态创建的QTextEdit实例,之后遍历这个列表就能获取每个文本框的内容。

修改后的代码如下:

class Ui_SecondWindow(object):
    def setupUi(self, SecondWindow):
        _translate = QtCore.QCoreApplication.translate
        SecondWindow.setObjectName("SecondWindow")
        SecondWindow.resize(500, 720)

        self.grid_layout = QtWidgets.QWidget(SecondWindow)
        self.grid_layout.setGeometry(QtCore.QRect(0, 0, 250, 1000))
        self.grid_layout.setObjectName("grid_layout")

        self.grid = QtWidgets.QGridLayout(self.grid_layout)
        self.grid.setContentsMargins(0,0,0,0)
        self.grid.setObjectName('grid')

        # 初始化列表存储所有QTextEdit实例
        self.text_edits = []

        for i in range(1, int_nb_cond+1):
            enter_nbcond = QtWidgets.QTextEdit(self.grid_layout)
            enter_nbcond.setMaximumHeight(26)
            enter_nbcond.setObjectName(f"enter_nbcond_{i}")  # 给每个文本框设置唯一标识(可选)
            enter_nbcond.setPlaceholderText(_translate("SecondWindow", f"Name condition {i}:"))
            enter_nbcond.resize(5,5)
            self.grid.addWidget(enter_nbcond, i, 0)
            # 将当前文本框添加到列表中
            self.text_edits.append(enter_nbcond)

    # 获取所有文本编辑框内容
    def ent(self):
        # 遍历列表,逐个获取内容
        for idx, text_edit in enumerate(self.text_edits, 1):
            content = text_edit.toPlainText()
            print(f"Condition {idx} content: {content}")

说明:

  • 在setupUi中初始化self.text_edits空列表,每次创建QTextEdit后都将实例添加到列表中,保留所有文本框的引用。
  • 在ent方法里遍历列表,即可依次获取每个文本框的内容。
  • 可选操作:给每个文本框设置唯一的objectName,方便后续通过findChild方法单独查找(如果需要)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:18:15