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

PyQt5问题:获取循环生成的复选框同行文本框的值

解决PyQt5对话框获取勾选行QLineEdit值的方案

核心思路

把每行的QCheckBox和对应的QLineEdit关联存储,同时绑定DataFrame的行索引,点击OK时遍历筛选勾选的行,直接从关联的输入框中提取内容即可。

完整实现代码

import sys
import pandas as pd
from PyQt5.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, 
                             QCheckBox, QLabel, QLineEdit, QPushButton, QWidget)

class DataFrameEditDialog(QDialog):
    def __init__(self, df, parent=None):
        super().__init__(parent)
        self.df = df
        # 存储勾选框与对应输入框、行索引的映射
        self.checkbox_bindings = {}
        
        self._setup_ui()
        
    def _setup_ui(self):
        main_layout = QVBoxLayout()
        
        # 遍历DataFrame生成每行控件
        for row_idx, row_data in self.df.iterrows():
            row_container = QWidget()
            row_layout = QHBoxLayout(row_container)
            
            checkbox = QCheckBox()
            type_label = QLabel(row_data['类型'])
            status_edit = QLineEdit(str(row_data['状态']))
            
            # 绑定控件与行信息
            self.checkbox_bindings[checkbox] = (status_edit, row_idx)
            
            row_layout.addWidget(checkbox)
            row_layout.addWidget(type_label)
            row_layout.addWidget(status_edit)
            main_layout.addWidget(row_container)
        
        # 添加OK按钮
        ok_btn = QPushButton('确认')
        ok_btn.clicked.connect(self.onokclick)
        main_layout.addWidget(ok_btn)
        
        self.setLayout(main_layout)
        self.setWindowTitle('数据状态编辑')
        
    def onokclick(self):
        # 收集待上传的勾选行数据
        upload_list = []
        for checkbox, (edit_box, row_idx) in self.checkbox_bindings.items():
            if checkbox.isChecked():
                # 获取输入框内容和对应行的类型信息
                new_status = edit_box.text().strip()
                data_type = self.df.loc[row_idx, '类型']
                upload_list.append({
                    '类型': data_type,
                    '更新状态': new_status,
                    '原数据索引': row_idx
                })
        
        # 此处替换为你的数据库上传逻辑
        print('准备上传的数据:', upload_list)
        # 示例:若用pymysql,可循环upload_list执行INSERT语句
        self.accept()

if __name__ == '__main__':
    # 测试用示例DataFrame
    test_data = pd.DataFrame({
        '类型': ['系统模块', '用户模块', '订单模块'],
        '状态': ['运行中', '维护中', '待上线']
    })
    
    app = sys.argv
    dialog = DataFrameEditDialog(test_data)
    dialog.exec_()

关键细节说明

  • 控件绑定:通过checkbox_bindings字典将勾选框与输入框、DataFrame行索引绑定,避免了通过布局查找控件的繁琐操作,直接关联目标数据。
  • 数据提取:在onokclick中遍历绑定字典,判断勾选状态后直接获取输入框文本,同时可通过行索引从原DataFrame中提取其他关联字段,方便组装数据库上传所需的完整数据结构。
  • 扩展性:如果需要传递更多行数据,可在绑定字典中存储整行的Series对象,进一步简化数据提取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:57:23