PyQt - QTableWidget的setText方法获取AttributeError

时间:2014-11-26 03:17:54

标签: python pyqt qtablewidget attributeerror

我使用pyuic从Qt Designer编译GUI文件,我试图弄清楚如何设置第一列中具有相同值"n"的所有单元格。

以下是我的代码:

class Ui_MainWindow(object):
    ...
    def accinit(self):
        for n in xrange(9):
            item = self.tableWidget.item(n, 0)
            item.setText(_translate("MainWindow", "n", None))

控制台输出:

  

AttributeError:'NoneType'对象没有属性'setText'

我只更改了一个单元格(0,0)的代码,并且它完美地运行:

def accinit(self):
    item = self.tableWidget.item(0, 0)
    item.setText(_translate("MainWindow", "n", None))

(0,0)处的单元格内容为"n"

我想也许在for循环中不允许这样做,所以我将代码更改为:

def accinit(self):
    for x in xrange(1):
        item = self.tableWidget.item(0, 0)
        item.setText(_translate("MainWindow", "n", None))

但它仍然有效!为什么呢?

我已经引用了以下文章(但我仍然无法解决此错误):

Python: Attribute Error - 'NoneType' object has no attribute 'something'

Python AttributeError: NoneType object has no attribute 'close'

1 个答案:

答案 0 :(得分:3)

我不太确定。但这可能有所帮助。

显示无类型对象错误

=> tableWidget.item语句执行后,item为None

=>某些n的(n,0)没有项目,因为它没有返回

但它适用于(0,0)

=>一个项目已经存在于(0,0)

=>检查你的tableWidget是否有标题?如果它有标题,那么有一个非空项目 (0,0)因此您可以为它设置文本。因此,只有(0,x)中有一个项目,它会为(1,0)抛出NoneType错误而不会抛出(0,0)。

可能的解决方案?或纠正

创建一个新项目,并使用tableWidget.setItem(...)来完成所需的工作。 像

这样的东西
for x in xrange(5):
    item = QTableWidgetItem()
    item.setText("blah blah")
    self.tableWidget.setItem(n, 0, item)