【问题标题】:What is the "role" argument in QTableWidgetItem.data(self, int *role*)?QTableWidgetItem.data(self, int *role*) 中的“角色”参数是什么?
【发布时间】:2016-10-13 10:40:16
【问题描述】:

我正在查看文档:

我可以将IDList.append(item.data()) 行放入我的代码中,并将其打印为正确的值。但奇怪的是,在那一行之后,它给了我这个错误:

TypeError: QTableWidgetItem.data(int): 没有足够的参数

我不知道为什么错误消息出现在打印行之后,但我认为这不应该很重要。文档中的“int role”是什么意思?请举个例子好吗?

【问题讨论】:

    标签: python pyqt qtablewidgetitem


    【解决方案1】:

    一个项目有多种与之相关的数据,例如文本、字体、背景、工具提示等。role 是来自ItemDataRole enum 的一个值,可让您指定所需的数据类型。

    其中一些数据项还具有访问器功能。所以这两行代码是等价的:

    font = item.font()
    font = item.data(QtCore.Qt.FontRole)
    

    数据角色是可扩展的。您可以使用以Qt.UserRole 开头的任何值将自定义角色与您自己的数据相关联:

    MyRole = QtCore.Qt.UserRole + 2
    item.setData(MyRole, [1, 2, 3])
    ...
    data = item.data(MyRole)
    

    【讨论】:

    • 我如何知道使用什么角色?某处有清单吗?
    • 哦,我在您添加的链接中看到了它们。谢谢。
    • 我正在尝试使用 data() 从我的项目中获取 Int。我为此使用哪个角色?我可以在项目中使用类似 .number() 的东西吗?
    • @PaulJackways。你用的是 Python2 吗?如果你是,data() 将返回一个QVariant,所以你可以使用.toInt() 来获得一个Python int。但是,更好的解决方案是遵循this answer 中的建议,这将完全摆脱QVariant。您也可以对QString 执行相同操作,因此您不必一直使用str 进行转换。
    • 我正在使用 python 3.4,但无论如何我都会尝试。
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多