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_())

第三步:运行

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

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