Search code examples
pythonpyqt6

PyQt6 IndexError from QTableWidget


this is the mini Excel. i tried to load to csv file, and i was successed to show the table.

So i think it's perfect. but it is not. PyCharm Showed me the IndexError -\> list index out of range

but i can't find this problem anywhere.

this is my code. and i made a QTableWidget with PyQt6 Designer. the table name is self.mytable.

def make_table(self, tableitems):
    self.mytable.setRowCount(len(tableitems))
    self.mytable.setColumnCount(len(tableitems[0]))
    print(len(tableitems), len(tableitems[0]))
    cnt = 0
    try:
        for i in range(len(tableitems)):
            for j in tableitems:
                self.mytable.setItem(cnt, i, QTableWidgetItem(j[i]))
                cnt += 1
                if cnt == len(tableitems):
                    cnt = 0
    except Exception:
        err_msg = traceback.format_exc()
        print(err_msg)

def open_file(self):
    filename = QFileDialog.getOpenFileName(self, "열기") #Open
    table = QTableWidget()
    tableitems = list()
    if filename[0]:
        f = open(filename[0], "r", encoding="utf-8")
        with f:
            datalines = csv.reader(f)
            for dataline in datalines:
                tableitems.append(dataline)
            UI.make_table(self, tableitems)
            self.infor.setText("파일 불러오기에 성공했어요!") # File has been Loaded
            self.file_name = filename[0]
    else:
        self.infor.setText("파일 불러오기에 실패했어요!") # File hasn't been Loaded

and Traceback tell me about error's occur line.

self.mytable.setItem(cnt, i, QTableWidgetItem(j[i]))
                                              ~^^^

but i could't find what's the problem.

I also checked the csv file separately, but there was no problem.

Please let me know what should i do.


Solution

  • really thanks for musicamante, i found the answer that what should i do.

            try:
            for row, rowitems in enumerate(tableitems):
                for column, item in enumerate(rowitems):
                    self.mytable.setItem(row, column, QTableWidgetItem(rowitems[column]))