我使用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'
答案 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)