【问题标题】:How to setData using UserRole in QTableWidgetItem in PyQt5如何在 PyQt5 的 QTableWidgetItem 中使用 UserRole 设置数据
【发布时间】:2017-02-14 10:19:24
【问题描述】:

当我尝试使用QtCore.Qt.UserRolesetData 存储data 时崩溃:item.setData(QtCore.Qt.UserRole, data)

有趣的是,一种非常相似的方法在 PyQt4 中起作用(我实际上是将以前编写的 PyQt4 代码移植到 PyQt5)。

from PyQt5 import QtCore, QtGui, QtWidgets

table = QtWidgets.QTableWidget()
items = ['Item_01','Item_02','Item_03']
column_names = ['Column_01','Column_02','Column_03']

for row, header in enumerate(items):
    for col, column_name in enumerate(column_names):    
        item = QtWidgets.QTableWidgetItem(column_name)
        table.setItem(row, col, item)
        item.setData(QtCore.Qt.UserRole, column_name)  

【问题讨论】:

  • 如果用作 UserRole 值“只是从头部随机生成QtCore.Qt.UserRole + 10 怎么办?
  • 也因为“Qt::UserRole 是 0x0100”,如果用整数“8”替换 QtCore.Qt.UserRole 会怎样,比如item.setData(8, column_name)
  • 我无法重现这一点 - 除非按字面意思理解代码,并且您未能创建 QApplication
  • 我也无法复制它。我正在运行一个围绕 PyQt5 构建的第三方应用程序。之前为它编写的所有插件现在都需要重新编写以解决 PyQt5 中的差异。看来使用QtCore.Qt.UserRole+integer 工作正常。谢谢!

标签: python qt pyqt5


【解决方案1】:

我也有同样的问题,@ekhumoro kindly helped me out

我使用了模型/视图方法,QTableWidget 继承了 QTableView,因此它也应该适用于您。

column0 = QtGui.QStandardItem()
column0.setData('Some Label',QtCore.Qt.DisplayRole)
column0.setEditable(False)

x = 123.456

column1 = QtGui.QStandardItem()
column1.setData(x,QtCore.Qt.DisplayRole)

data = [column0, column1]

row = 0 #Specify a row.

for index, element in enumerate(data):
    model.setItem(row,index,element)
    # Or in this case you might write: treeWidget.setItem(...)

可以使用的角色列表can be found here

编辑我想我错过了您指定userRole 在这种情况下只需指定:

QtCore.Qt.UserRole+desired_role_number

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多