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