2017-01-16 152 views
0

我是Python腳本編寫新手,現在正在設計一個窗口界面,以便將每日費用保存到EXCEL文件中。 我寫了一個QTableWidget來輸入每日費用信息,但在將數據保存到EXCEL文件時發現錯誤消息「AttributeError:'Window'對象沒有屬性'tableWidget'」。 任何人都可以給我提示前進嗎?將Python QTableWidget數據保存到EXCEL時出現什麼問題

以下是我的代碼供您參考。

class Window(QtGui.QWidget): 
    def __init__(self):        #Initial a Window frame 
     super(Window, self).__init__() 
     self.labels()        #insert labels 
     self.buttons()        #insert buttons 
     self.draglists() 
     self.table() 
. 
. 
. 

    def table(self): 
     table = QtGui.QTableWidget(self) 
     table.setRowCount(20) 
     table.setColumnCount(4) 
     table.resize(450, 300) 
     table.move(640, 100) 
     horHeader = ['Date', 'Category', 'Item', 'Expense'] 
     table.setHorizontalHeaderLabels(horHeader) 
    def savefile(self): 
     filename = unicode(QtGui.QFileDialog.getSaveFileName(self, 'Save File', '', ".xls(*.xls)")) 
     wbk = xlwt.Workbook() 
     sheet = wbk.add_sheet("sheet", cell_overwrite_ok=True) 
     self.add2(sheet) 
     wbk.save(filename) 

    def add2(self, sheet): 
     for currentColumn in range(self.tableWidget.columnCount()): 
      for currentRow in range(self.tableWidget.rowCount()): 
       try: 
        teext = str(self.tableWidget.item(currentRow, currentColumn)).text() 
        sheet.write(currentRow, currentColumn, teext) 
       except AttributeError: 
        pass 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    ex = Window() 
    ex.setGeometry (50, 50, 1200, 600) 
    ex.show() 
    ex.setWindowTitle("Search Engine for Expense") 
    sys.exit(app.exec_()) 

回答

0

你參考,你還沒有定義的東西。你的類WindowQtGui.QWidget繼承,不具有的屬性稱爲tableWidget,但你引用一個屬性,叫做tableWidget這裏:

def add2(self, sheet): 
     for currentColumn in range(self.**tableWidget**.columnCount()): 
      for currentRow in range(self.**tableWidget**.rowCount()): 
       try: 
        teext = str(self.**tableWidget**.item(currentRow, currentColumn)).text() 
        sheet.write(currentRow, currentColumn, teext) 
       except AttributeError: 
        pass 

因此錯誤。如果你想self.tableWidget引用您在table(self)做出的表,你需要使它在函數結束的實例屬性,像這樣:

def table(self): 
    table = QtGui.QTableWidget(self) 
    table.setRowCount(20) 
    table.setColumnCount(4) 
    table.resize(450, 300) 
    table.move(640, 100) 
    horHeader = ['Date', 'Category', 'Item', 'Expense'] 
    table.setHorizontalHeaderLabels(horHeader) 
    self.tableWidget = table 

這將使你的其他功能來訪問表和其屬性,包括.columnCount().rowCount()

希望有所幫助。

相關問題