QTableWidget doesn't refresh, after trying to import data from csv file with QFileDialog

44 views Asked by At

I am working with PyQt5 and trying to import csv data to my QTableWidget, using QFileDialog which i open with a QPushButton. The issue is, after choosing the file, my QTableWidget won't refresh and show the uploaded data. When i skip the QFileDialog function, and just use the name of a csv file it works fine, and everything works well. However i need to have a possibility to choose different data files. I checked, that uploading with QFileDialog works when i trigger it before application start. But i would like to do it with a button click.

Edit: I need to have those indexing functionality for my other sub-applications. I hope they don't disturb the function i want to make.

Here is the code:

class App(QMainWindow):
def __init__(self):
    super().__init__()
    self.index = 0
    self.port = None
    self.pointTimes = []
    self.pointLocations = []
    self.main_widget = QWidget(self)
    self.setCentralWidget(self.main_widget)
    self.setWindowTitle("Application")
    self.left = 50
    self.top = 100
    self.width = 1100
    self.height = 700
    self.setGeometry(self.left, self.top, self.width, self.height)
    tabw = self.createtabs()
    self.layout = QVBoxLayout()
    self.layout.addWidget(tabw)
    self.main_widget.setLayout(self.layout)

def importcsv(self):
    self.filepath, _ = QFileDialog.getOpenFileName(None, "Choose File", "", "(*csv)")
    self.filename = os.path.basename(self.filepath)
    self.importlocations()

# import distraction points from .csv file
def importlocations(self):
    with open(self.filename, "r") as csvfile:
        pointreader = csv.reader(csvfile)
        for row in pointreader:
            self.pointLocations.append(row[0])
            self.pointTimes.append(row[1])
    self.createTable()

def getTaskQuantity(self):
    return self.taskQuantity

def createTable(self):
    self.taskQuantity = len(self.pointLocations)-1
    # Defining data inside table
    self.table = QTableWidget(self.tab3)
    self.table.move(20, 80)
    self.table.setRowCount(self.taskQuantity)
    self.table.setColumnCount(6)
    # self.table.setColumnWidth(0, 70)
    self.table.setHorizontalHeaderLabels(
        ["Status", "Position", "Expect time", "LED Indicate Time - UTC", "Time 2", "Time 3"])

    for row in range(self.taskQuantity):
        self.table.setItem(row, 1, QTableWidgetItem(self.pointLocations[row+1]))
    for row in range(self.taskQuantity):
        self.table.setItem(row, 2, QTableWidgetItem(self.pointTimes[row+1]))
    header = self.table.horizontalHeader()
    header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
    header.setSectionResizeMode(2, QHeaderView.ResizeToContents)
    self.table.setFixedSize(1035, 420)
    self.table.setColumnWidth(0, 100)
    self.table.setColumnWidth(3, 200)
    self.table.setColumnWidth(4, 200)
    self.table.setColumnWidth(5, 200)

    delegate = AlignDelegate(self.table)
    self.table.setItemDelegate(delegate)
    scroll_bar = QScrollBar(self)
    self.table.setHorizontalScrollBar(scroll_bar)

def getIndex(self):
    return self.index

def incrIndex(self):
    self.index += 1
0

There are 0 answers