我遇到以下错误:
AttributeError: 'NoneType' object has no attribute 'text'
专门从此行:
Item1=self.ProductsTable.item(i,0).text()
运行此代码时:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys,csv,os
import random
import csv_library as csvlib
from PyQt4 import QtCore, QtGui, uic
EditMenu = uic.loadUiType("editmenu.ui")[0]
test=csvlib.csv2list("Food.csv")
NewMenu=[]
class WindowClass6(QtGui.QMainWindow, EditMenu):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.setWindowTitle("Menu")
self.Save.clicked.connect(self.Save2Menu)
self.Back.clicked.connect(self.Back2Login)
###
global ProductsTable
self.ProductsTable.setColumnCount(3)
self.ProductsTable.setRowCount(11)
#self.ProductsTable.setHorizontalHeaderLabels(["Food Item", "Price", "Reward Points"])
for i in range (0,len(test)):
self.ProductsTable.setItem(i,0, QTableWidgetItem(str(test[i][0])))
self.ProductsTable.setItem(i,1, QTableWidgetItem(str(test[i][1])))
self.ProductsTable.setItem(i,2, QTableWidgetItem(str(test[i][2])))
def Save2Menu(self):
NewMenu = []
# do not use global variable, you would get previous items after second call of `Save2Menu`
for i in range (0,len(test)):
Item1=self.ProductsTable.item(i,0).text()
# 1) text() will return string representation of item content
# 2) pass only 2 parameters as I commented
print(Item1)
Item2=self.ProductsTable.item(i,1).text()
print(Item2)
Item3=self.ProductsTable.item(i,2).text()
print(Item3)
temp=[]
temp.append(Item1)
temp.append(Item2)
temp.append(Item3)
NewMenu.append(temp)
csvlib.list2csv(NewMenu,"Food2.csv")
我研究了NoneType错误,显然,这可能是给我这个问题的,因为表中的单元格中没有值,但是当它生成表时,它看起来像这样:
所有值都从先前的for循环中加载,因此我不知道此错误来自何处,其他线程的帮助不多,因此,如果重复或其他任何操作,都感到抱歉。
“ csv_library”:
import csv
import os
def csv2list(file_name):
list_name=[]
with open(file_name) as csvfile:
reader = csv.reader(csvfile)
for row in reader:
list_name.append(row)
return list_name
def list2csv(list_name,file_name):
#write back to the csv
with open(file_name, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(list_name)
#it's a procedure, nothing returned
def launch_file(file_name):
os.startfile(file_name)
CSV文件内容:(12行3列)
Cheeseburger,14,14
CokeCherry ,1,1
Chickenburger,13,13
ChickenNuggets,8,8
Coke ,1,1
CokeZero ,1,1
Fries,4.5,4.5
MeatFeastPizza,20,20
OnionRings,6,6
PepperoniPizza,16,16
VeggiPizza,22,22
TheVeggieBurger,15,15