gpt4 book ai didi

python - PyQT:QTableWidget.setItemPrototype 不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:35 25 4
gpt4 key购买 nike

在 QTableWidget 中,我想仅显示带有两位小数的所有值。为此,我对 QTableWidgetItem 进行了子类化。

class MyCell(QTableWidgetItem):
def __init__(self, *args):
QTableWidgetItem.__init__(self, *args)

def clone(self):
return MyCell()

def data(self, role):
t = QTableWidgetItem(self).data(role)
if role == 0:
if t.type() != 0:
try:
a, b = str(t.toString()).split('.')
return QVariant( ".".join([a,b[:2]]))
except:
return t
return t

我阅读了文档,并认为我可以使用类似的东西:

class MyDialog(QDialog):
def __init__(self, parent=None):
super(MyDialog, self).__init__(parent)

self.table = QTableWidget()
acell = MyCell()
self.table.setItemPrototype(acell)

self.table.setRowCount(5)
self.table.setColumnCount(5)
....

但这或多或少会随机崩溃。当我使用 self.table.setItem 方法时,它可以正常工作。任何提示表示赞赏。

最佳答案

这里有两个问题。一个可能是你的代码有问题,另一个可能是 PyQt 中的错误。

在你的 data() 方法实现中,你可能想这样写:

def data(self, role):
t = QTableWidgetItem.data(self, role)
...

这会调用父类(super class)的 data() 方法,而不是创建新项并调用其 data 方法。

当您设置对话框时,您可能需要保留对项目原型(prototype)的引用:

def __init__(self, parent=None):
super(MyDialog, self).__init__(parent)

self.table = QTableWidget()
self.acell = MyCell()
self.table.setItemPrototype(self.acell)

尽管 Qt 文档说原型(prototype)的所有权已传递给表小部件,但 PyQt 绑定(bind)似乎并未执行此操作,因此您需要防止原型(prototype)被垃圾收集。

关于python - PyQT:QTableWidget.setItemPrototype 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com