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
相关产品推荐
相关产品推荐

