python - 无法使用 .setItem(row, colum, QTableWidgetItem(data)) 填充 QTableWidget
问题描述
我想测试 PyQt 以编写一个快速应用程序来以类似 Excel 的形式显示和编辑数据,但从未显示数据。
我读过的文档和书都说在 QtableWidget 对象上使用 .setItem(row, colum, QTableWidgetItem(data)) 是一种方法。但是,下面的代码不起作用,我只有一个空表,我不知道为什么。任何想法 ?
import sys
from PyQt5.QtWidgets import (
QApplication,
QMainWindow,
QTableWidget,
QTableWidgetItem,
QMenu,
QAction,
QInputDialog,
)
class SpreadsheetFramework(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setMinimumSize(1000, 500)
self.setWindowTitle("Spreadsheet Table")
# Used for copy and paste actions
self.item_text = None
self.createTable()
self.fillTable()
self.show()
def createTable(self):
self.table_widget = QTableWidget()
self.table_widget.setRowCount(10)
self.table_widget.setColumnCount(10)
self.table_widget.setCurrentCell(0, 0)
self.setCentralWidget(self.table_widget)
def fillTable(self):
for i in range(10):
for j in range(10):
self.table_widget.setItem(i, j, QTableWidgetItem(i * j))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = SpreadsheetFramework()
sys.exit(app.exec_())
这是我运行代码时窗口的样子
解决方案
如果你想在 QTableWidgetItem 中显示数据并通过构造函数传递它,那么它必须是一个字符串。
self.table_widget.setItem(i, j, QTableWidgetItem(str(i * j)))
缺点是它不再是数字而是代表数字的字符串。
另一个更好的选择是使用 setData 将数字传递给 Qt.DisplayRole 角色。
item = QTableWidgetItem()
item.setData(Qt.DisplayRole, i * j)
self.table_widget.setItem(i, j, item)
推荐阅读
- xslt - XSLT 创建仅节点字段存在
- python - 使用班级权重后 F1 分数降低
- javascript - 如何不使用 compare_length_with
- python - Pandas Python中的拆分列表
- c# - 具有 Iiherited 泛型类型的类转换为具有基本泛型类型的类
- xamarin - 导航返回后 OnAppearing 中的 Xamarin NavigationStack 计数错误
- c - 如何在没有errno的情况下检查strtol溢出?
- docker - Docker compose,使用相同图像的两个服务:第一个失败,“没有这样的图像”,第二个运行正常
- python - 为什么 sklearn.svm.SVC 的属性 coef_ 具有 shape = [n_class * (n_class-1) / 2, n_features]?
- typescript - 打字稿:如何使函数返回类型