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
相关产品推荐
相关产品推荐

