PyQt5 QTabelWidget 选择单元格的四种方法

import sys
from PyQt5.QtWidgets import *


class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(900, 600)
        self.setWindowTitle('QTableWidget选中单元格的三方法')
        MainLay = QVBoxLayout()
        self.setLayout(MainLay)

        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(18)
        self.tableWidget.setColumnCount(8)
        for i in range(self.tableWidget.rowCount()):
            for j in range(self.tableWidget.columnCount()):
                item = QTableWidgetItem(f'{i},{j}')
                self.tableWidget.setItem(i, j, item)
        MainLay.addWidget(self.tableWidget)
        MainLay.addStretch()

        lay = QHBoxLayout()
        MainLay.addLayout(lay)

        b1 = QPushButton('选中的单元格项')
        b1.clicked.connect(self.selectedeItems)
        b2 = QPushButton('选中的单元格区域')
        b2.clicked.connect(self.selectedRanges)
        b3 = QPushButton('选中的单元格索引')
        b3.clicked.connect(self.selectedIndexes)
        b4 = QPushButton('选中的选择模型')
        b4.clicked.connect(self.selectionModel)
        lay.addStretch()
        lay.addWidget(b1)
        lay.addWidget(b2)
        lay.addWidget(b3)
        lay.addWidget(b4)

    def selectedeItems(self):
        selectedItems = self.tableWidget.selectedItems()
        print(selectedItems)
        '''
            输出结果是一个列表,元素为被选中的单元格项,该结果输出的前提是,单元格必须用table.setItem()方法先设置单元格项
        '''
        for item in selectedItems:
            print(f'被索引单元格的行号:{item.row()},列号:{item.column()},文本:{item.text()}')
        '''
            QTableWidgetItem对象的方法
                item.row()  单元格项所在的行号
                item.column()   单元格项所在的列号
                item.text() 单元格项的文本内容
        '''

    def selectedRanges(self):
        selectedRanges = self.tableWidget.selectedRanges()
        print(selectedRanges)
        '''
            输出结果是一个列表,元素为被选中的单元格区域
        '''
        for Range in selectedRanges:
            print(Range.topRow(), Range.leftColumn(), Range.bottomRow(), Range.rightColumn())

        '''
            在 PyQt5 中,QTableWidget的selectedRanges()方法用于获取当前选中的范围列表。每个范围用QTableWidgetSelectionRange
        对象表示。
            QTableWidgetSelectionRange描述了一个基于逻辑项位置连续的矩形范围,其矩形范围的左上角坐标为该范围内左上角逻辑项的逻辑行号
        和列号,右下角为右下角逻辑项的逻辑行号和列号。需要注意的是,这里指的是逻辑项而不是可见项。
            由于选中的项可能不连续,因此selectedRanges()返回的可能是多个QTableWidgetSelectionRange矩形的列表,每个矩形内是一个连
        续的选中范围。
            QTableWidgetSelectionRange对象的方法
                Range.topRow()  选中单元格区域的上部行号
                Range.leftColumn()  选中单元格区域的左侧列号
                Range.bottomRow()   选中单元格区域的下部行号
                Range.rightColumn() 选中单元格区域的右侧列号
        '''

    def selectedIndexes(self):
        selectedIndexes = self.tableWidget.selectedIndexes()
        print(self.tableWidget.selectedIndexes())
        '''
            输出结果是一个列表,元素为被选中的单元格索引
        '''
        for index in selectedIndexes:
            row = index.row()
            column = index.column()
            item = self.tableWidget.item(row, column)
            print(f'选中的单元格行号{row},列号{column},内容:{item.text()}')

        '''
            在 PyQt5 中,QTableWidget的selectedIndexes()方法用于获取当前选中的单元格索引列表。每个索引表示表格中的一个单元格位置。
        索引对象的方法
            index.row() 返回索引单元格的所在行号
            index.column()  返回索引单元格的所在列号
        '''
    def selectionModel(self):
        selection=self.tableWidget.selectionModel() # 返回值是一个PyQt5.QtCore.QItemSelectionModel对象
        print(selection)
        selectedIndexes=selection.selectedIndexes() # 返回选择的区域的单元格索引列表,每一个元素都是PyQt5.QtCore.QModelIndex对象。
        for index in selectedIndexes:
            row = index.row()
            column = index.column()
            item = self.tableWidget.item(row, column)
            print(f'选中的单元格索引{index},行号{row},列号{column},内容:{item.text()}')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWin()
    w.show()
    app.exec()

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值