QTableWidget添加QComboBox控件并获取控件值

使用pyqt5编写的程序,在QTableWidget插入QComboBox控件并获取控件值。

第一步:原理

QTableWidget是Qt程序中常用的显示数据表格的控件,其单元数据是通过QTableWidgetItem对象来实现的,使用QTableWidget时就需要QTableWidgetItem。整个表格就是用各个单元格构建起来的。

本程序在QTableWidget控件单元格中插入QTableWidgetItem,QComboBox控件,并可以修改单元格的不同值。通过控件提供的函数及循环,还可以遍历获取到整个QTableWidget表格中的所有值。

第二步:程序

import sys
from PyQt5.QtWidgets import *

class Table(QWidget):
    def __init__(self):
        super(Table, self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle("QTableWidget例子")
        self.resize(400,300)
        layout=QVBoxLayout()

        #实现的效果是一样的,四行三列,所以要灵活运用函数,这里只是示范一下如何单独设置行列
        self.TableWidget=QTableWidget(2,2)

        # TableWidget = QTableWidget()
        # TableWidget.setRowCount(4)
        # TableWidget.setColumnCount(3)

        #设置水平方向的表头标签与垂直方向上的表头标签,注意必须在初始化行列之后进行,否则,没有效果
        self.TableWidget.setHorizontalHeaderLabels(['姓名','性别'])
        #Todo 优化1 设置垂直方向的表头标签
        #TableWidget.setVerticalHeaderLabels(['行1', '行2', '行3', '行4'])

        #TODO 优化 2 设置水平方向表格为自适应的伸缩模式
        ##TableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        #TODO 优化3 将表格变为禁止编辑
        #TableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

        #TODO 优化 4 设置表格整行选中
        #TableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

        #TODO 优化 5 将行与列的高度设置为所显示的内容的宽度高度匹配
        #QTableWidget.resizeColumnsToContents(TableWidget)
        #QTableWidget.resizeRowsToContents(TableWidget)

        #TODO 优化 6 表格头的显示与隐藏
        #TableWidget.verticalHeader().setVisible(False)
        #TableWidget.horizontalHeader().setVisible(False)

        #TOdo 优化7 在单元格内放置控件
        # comBox=QComboBox()
        # comBox.addItems(['男','女'])
        # comBox.addItem('未知')
        # comBox.setStyleSheet('QComboBox{margin:3px}')
        # TableWidget.setCellWidget(0,1,comBox)
        #
        # searchBtn=QPushButton('修改')
        # searchBtn.setDown(True)
        # searchBtn.setStyleSheet('QPushButton{margin:3px}')
        # TableWidget.setCellWidget(0,2,searchBtn)

        #添加数据
        newItem=QTableWidgetItem('张三')
        self.TableWidget.setItem(0,0,newItem)

        newItem=QTableWidgetItem('李四')
        self.TableWidget.setItem(1,0,newItem)

        #TOdo 在单元格内放置控件
        comboxColumn=QComboBox()
        comboxColumn.addItems(['男','女'])
        comboxColumn.addItem('未知')
        self.TableWidget.setCellWidget(0,1,comboxColumn)

        comboxColumn=QComboBox()
        comboxColumn.addItems(['男','女'])
        comboxColumn.addItem('未知')
        self.TableWidget.setCellWidget(1,1,comboxColumn)

        layout.addWidget(self.TableWidget)

        self.button = QPushButton('获取表格值')
        self.button.clicked.connect(self.getValue)
        layout.addWidget(self.button)

        self.setLayout(layout)

    def getValue(self):
        print('getValue:')
        for idx in range(self.TableWidget.rowCount()):
            print('姓名:' + self.TableWidget.item(idx,0).text() + ',性别:' + self.TableWidget.cellWidget(idx,1).currentText())


if __name__ == '__main__':
    app=QApplication(sys.argv)
    win=Table()
    win.show()
    sys.exit(app.exec_())

第三步:运行

运行效果如下图,修改表格值后,点击 “获取表格值” 按钮,可以在命令行窗口中打印出整个表格的值。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
获取 QTableWidget 中下拉框和复选框的状态,可以使用以下方法: 1. 获取下拉框状态: - 使用 `QTableWidget::cellWidget(row, column)` 获取指定单元格的下拉框件指针。 - 使用 `qobject_cast<QComboBox*>(widget)` 将获取到的指针转换为 QComboBox 指针。 - 调用 QComboBox 的相应方法(如 `currentText()`)获取当前选中的选项。 2. 获取复选框状态: - 使用 `QTableWidget::cellWidget(row, column)` 获取指定单元格的复选框件指针。 - 使用 `qobject_cast<QCheckBox*>(widget)` 将获取到的指针转换为 QCheckBox 指针。 - 调用 QCheckBox 的相应方法(如 `isChecked()`)获取复选框的选中状态。 以下是一个示例代码,展示如何获取 QTableWidget 中下拉框和复选框的状态: ```cpp // 假设 tableWidget 是已经创建并填充了下拉框和复选框的 QTableWidget // 获取下拉框状态 int row = 0; // 指定行 int column = 0; // 指定列 QWidget *widget = tableWidget.cellWidget(row, column); QComboBox *comboBox = qobject_cast<QComboBox*>(widget); QString selectedOption = comboBox->currentText(); qDebug() << "下拉框状态:" << selectedOption; // 获取复选框状态 row = 0; // 指定行 column = 1; // 指定列 widget = tableWidget.cellWidget(row, column); QCheckBox *checkBox = qobject_cast<QCheckBox*>(widget); bool isChecked = checkBox->isChecked(); qDebug() << "复选框状态:" << isChecked; ``` 请注意,以上代码仅为演示目的,实际使用时可能需要根据具体需求进行修改。如果要获取整个 QTableWidget 中所有下拉框和复选框的状态,可以使用循环迭代每个单元格。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值