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

PyQt5 QTableWidget选中数据打印问题:内置函数仅输出对象信息

PyQt5 QTableWidget 获取选中数据的正确方式

我尝试了currentItem()、selectedItems()等内置函数,想要在Python的PyQt5 QTableWidget中打印选中的数据,但使用这些函数时,仅输出对象实例信息。

我的代码:

import sys
from PyQt5.uic import loadUi
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication


class MainWindow(QDialog):
    def __init__(self):
        super(MainWindow, self).__init__()
        loadUi("tabletutorial.ui",self)
        self.tableWidget.setColumnWidth(0,250)
        self.tableWidget.setColumnWidth(1,100)
        self.tableWidget.setColumnWidth(2,350)
        self.loaddata()
        self.pushButton.clicked.connect(self.pri)

    def loaddata(self):
        people=[{"name":"John","age":45,"address":"New York"}, {"name":"Mark", "age":40,"address":"LA"},
                {"name":"George","age":30,"address":"London"}]
        row=0
        self.tableWidget.setRowCount(len(people))
        for person in people:
            self.tableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(person["name"]))
            self.tableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(person["age"])))
            self.tableWidget.setItem(row, 2, QtWidgets.QTableWidgetItem(person["address"]))
            row=row+1
            
    def pri(self):
         h=self.tableWidget.selectedItems()
         R=self.tableWidget.selectedIndexes()
         p=self.tableWidget.currentItem()
        #  j=self.tableWidget.Items()
         print(h)
         print(R)
         print(p)
        #  print(j)


# main
app = QApplication(sys.argv)
mainwindow = MainWindow()
widget = QtWidgets.QStackedWidget()
widget.addWidget(mainwindow)
widget.setFixedHeight(850)
widget.setFixedWidth(1120)
widget.show()
try:
    sys.exit(app.exec_())
except:
    print("Exiting")

输出结果:

<PyQt5.QtWidgets.QTableWidgetItem object at 0x0000021DD56C9820>
[<PyQt5.QtWidgets.QTableWidgetItem object at 0x0000021DD56C9EE0>]
[<PyQt5.QtCore.QModelIndex object at 0x0000021DD556BB30>]
<PyQt5.QtWidgets.QTableWidgetItem object at 0x0000021DD56C9EE0>

解决方法

你看到的是对象的内存实例信息,因为selectedItems()、currentItem()返回的是QTableWidgetItem对象,selectedIndexes()返回的是QModelIndex对象,要获取单元格的实际数据,需要调用对应的方法:

1. 获取选中单元格的文本内容

修改pri方法,遍历选中项并调用text()(针对QTableWidgetItem)或data()(针对QModelIndex):

def pri(self):
    # 处理selectedItems()返回的结果
    selected_items = self.tableWidget.selectedItems()
    print("选中的单元格内容:")
    for item in selected_items:
        print(item.text())
    
    # 处理currentItem()返回的结果
    current_item = self.tableWidget.currentItem()
    if current_item:
        print(f"\n当前选中项内容:{current_item.text()}")
    
    # 处理selectedIndexes()返回的结果
    selected_indexes = self.tableWidget.selectedIndexes()
    print("\n通过索引获取的内容:")
    for index in selected_indexes:
        # data()默认获取显示角色的数据,等价于index.data(Qt.DisplayRole)
        print(index.data())

2. 获取完整的选中行数据

如果需要获取整行的选中数据,可以先拿到所有选中的行号,再遍历每一行的列:

def pri(self):
    # 收集所有选中的行号(去重,避免同一行多次输出)
    selected_rows = set()
    for item in self.tableWidget.selectedItems():
        selected_rows.add(item.row())
    
    print("选中的行数据:")
    for row in selected_rows:
        row_data = []
        # 遍历当前行的所有列
        for col in range(self.tableWidget.columnCount()):
            item = self.tableWidget.item(row, col)
            if item:
                row_data.append(item.text())
        print(f"第{row+1}行:{row_data}")

内容的提问来源于stack exchange,提问作者Yūjin-A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:20:27