PySide6 QTable Help - Can't Get it to Populate with Data

28 Views Asked by At

I am trying to get a PySide6 QTable to populate. I can't work out if it is being populated, but just not updating since I populate the table outside of the init call, or isn't getting populated in the first place.

I have tried to use the .repaint() call to refresh the table just in case but that doesn't work either.

I've provided an excerpt of the bit of code that seems to be giving me the issue. When I run the code, you see the table fine, but for some reason just isn't populating with any data.

tblData is the object I am using to populate the Table.

Any help you can offer is really appreciated.

import Forecast
import tkinter.messagebox as msgbox

from PySide6.QtCore import *
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from tkinter import *


class Widget(QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self.tblData = None
        self.lblTable = None
        self.lblPipeline = None
        self.cmbPipeline = None
        self.btnDownWeekNo = None
        self.btnUpWeekNo = None
        self.lblWeekNo = None
        self.sldWeekNo = None
        self.lblProgress = None
        self.btnRefreshFromDB = None
        self.label2 = None
        self.group1 = None
        self.cmbMailCentre = None
        self.w1 = None
        self.lblFormat = None
        self.cmbFormat = None
        self.lblRegion = None
        self.fc = Forecast.ForecastDataframes()
        self.formStillLoading = True
        self.gui()
        self.initialise()
        self.formStillLoading = False

    def gui(self):
        self.w1 = self
        self.w1.setAutoFillBackground(True)
        self.w1.setWindowTitle("Forecast Adjuster")
        self.w1.resize(460, 750)
        self.w1.setCursor(Qt.ArrowCursor)
        self.w1.setToolTip("")
        self.group1 = QGroupBox(self.w1)
        self.group1.setAutoFillBackground(True)
        self.group1.setTitle("Refresh From Database")
        self.group1.move(20, 20)
        self.group1.resize(260, 100)
        self.group1.setCursor(Qt.ArrowCursor)
        self.group1.setToolTip("")
        self.lblProgress = QLabel(self.group1)
        self.lblProgress.setText("Ready")
        self.lblProgress.move(10, 30)
        self.lblProgress.resize(120, 22)
        self.lblProgress.setCursor(Qt.ArrowCursor)
        self.lblProgress.setToolTip("")
        self.lblPipeline = QLabel(self.group1)
        self.lblPipeline.setText("Pipeline")
        self.lblPipeline.move(10, 60)
        self.lblPipeline.resize(120, 22)
        self.lblPipeline.setCursor(Qt.ArrowCursor)
        self.lblPipeline.setToolTip("")
        self.btnRefreshFromDB = QToolButton(self.group1)
        self.btnRefreshFromDB.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.btnRefreshFromDB.setText("Update")
        self.btnRefreshFromDB.move(140, 30)
        self.btnRefreshFromDB.resize(110, 22)
        self.btnRefreshFromDB.setCursor(Qt.ArrowCursor)
        self.btnRefreshFromDB.setToolTip("")
        self.btnRefreshFromDB.clicked.connect(self.btnRefreshFromDB_click)
        self.cmbPipeline = QComboBox(self.group1)
        self.cmbPipeline.move(140, 60)
        self.cmbPipeline.resize(110, 22)
        self.cmbPipeline.setCursor(Qt.ArrowCursor)
        self.cmbPipeline.setToolTip("")
        self.cmbPipeline.currentIndexChanged.connect(self.cmbPipeline_update)
        self.lblRegion = QLabel(self.w1)
        self.lblRegion.setText("Choose MC")
        self.lblRegion.move(20, 130)
        self.lblRegion.resize(90, 22)
        self.lblRegion.setCursor(Qt.ArrowCursor)
        self.lblRegion.setToolTip("")
        self.lblFormat = QLabel(self.w1)
        self.lblFormat.setText("Choose Format")
        self.lblFormat.move(20, 160)
        self.lblFormat.resize(90, 22)
        self.lblFormat.setCursor(Qt.ArrowCursor)
        self.lblFormat.setToolTip("")
        self.sldWeekNo = QSlider(self.w1)
        self.sldWeekNo.setMinimum(0)
        self.sldWeekNo.setMaximum(53)
        self.sldWeekNo.setSingleStep(1)
        self.sldWeekNo.setValue(1)
        self.sldWeekNo.setOrientation(Qt.Horizontal)
        self.sldWeekNo.move(20, 180)
        self.sldWeekNo.resize(270, 42)
        self.sldWeekNo.setCursor(Qt.ArrowCursor)
        self.sldWeekNo.setToolTip("1")
        self.sldWeekNo.valueChanged.connect(self.SliderWeekNo_update)
        self.btnUpWeekNo = QToolButton(self.w1)
        self.btnUpWeekNo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.btnUpWeekNo.setText("Up")
        self.btnUpWeekNo.move(300, 180)
        self.btnUpWeekNo.resize(40, 42)
        self.btnUpWeekNo.setCursor(Qt.ArrowCursor)
        self.btnUpWeekNo.setToolTip("")
        self.btnUpWeekNo.clicked.connect(self.btnScrollWeekNoUp_click)
        self.btnDownWeekNo = QToolButton(self.w1)
        self.btnDownWeekNo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        self.btnDownWeekNo.setText("Down")
        self.btnDownWeekNo.move(340, 180)
        self.btnDownWeekNo.resize(40, 42)
        self.btnDownWeekNo.setCursor(Qt.ArrowCursor)
        self.btnDownWeekNo.setToolTip("")
        self.btnDownWeekNo.clicked.connect(self.btnScrollWeekNoDown_click)
        self.lblWeekNo = QLabel(self.w1)
        self.lblWeekNo.setText("2023 W01")
        self.lblWeekNo.move(390, 190)
        self.lblWeekNo.resize(90, 22)
        self.lblWeekNo.setCursor(Qt.ArrowCursor)
        self.lblWeekNo.setToolTip("")
        self.cmbMailCentre = QComboBox(self.w1)
        self.cmbMailCentre.move(160, 130)
        self.cmbMailCentre.resize(110, 22)
        self.cmbMailCentre.setCursor(Qt.ArrowCursor)
        self.cmbMailCentre.setToolTip("")
        self.cmbMailCentre.currentIndexChanged.connect(self.cmbMC_update)
        self.cmbFormat = QComboBox(self.w1)
        self.cmbFormat.move(160, 160)
        self.cmbFormat.resize(110, 22)
        self.cmbFormat.setCursor(Qt.ArrowCursor)
        self.cmbFormat.setToolTip("")
        self.cmbFormat.currentIndexChanged.connect(self.cmbFormat_update)
        self.lblTable = QLabel(self.w1)
        self.lblTable.setText("Forecast vs Actuals vs Proposed")
        self.lblTable.move(20, 240)
        self.lblTable.resize(240, 22)
        self.lblTable.setCursor(Qt.ArrowCursor)
        self.lblTable.setToolTip("")
        self.tblData = QTableWidget(self.w1)
        self.tblData.move(20, 270)
        self.tblData.resize(420, 460)
        self.tblData.setCursor(Qt.ArrowCursor)
        self.tblData.setToolTip("")
        return self.w1

    def initialise(self):
        # Populate the MC Combo
        dfMailCentres = self.fc.get_distinct_mcs_from_db()
        listOfMCs = dfMailCentres['MailCentreName'].to_list()  # Convert column to a list
        listOfMCs.insert(0, 'National')  # Add National to the combobox
        self.cmbMailCentre.addItems(listOfMCs)  # Add items in the list to the combobox
        self.cmbMailCentre.setCurrentIndex(0)

        # Populate the Format Combo
        formats = ['Letters', 'Large Letters', 'Parcels', 'SD', 'Tracked']
        self.cmbFormat.addItems(formats)
        self.cmbFormat.setCurrentIndex(0)

        # Populate the Pipeline Combo
        pipeline = ['Delivered', 'Inward', 'Outward']
        self.cmbPipeline.addItems(pipeline)
        self.cmbPipeline.setCurrentIndex(0)

        # Initialise Data Table
        self.tblData.setColumnCount(5)
        self.tblData.setHorizontalHeaderItem(0, QTableWidgetItem('MailCentre'))
        self.tblData.setHorizontalHeaderItem(0, QTableWidgetItem('SummaryFormat'))
        self.tblData.setHorizontalHeaderItem(0, QTableWidgetItem('YearWeek'))
        self.tblData.setHorizontalHeaderItem(0, QTableWidgetItem('Actuals'))
        self.tblData.setHorizontalHeaderItem(0, QTableWidgetItem('Forecast'))

        self.tblData.setHorizontalHeaderLabels(['MailCentre', 'SummaryFormat', 'YearWeek', 'Actuals', 'Forecast'])

        self.tblData.setItem(1, 0, QTableWidgetItem("aMC"))
        self.tblData.setItem(1, 1, QTableWidgetItem("aMC"))
        self.tblData.setItem(1, 2, QTableWidgetItem("aMC"))
        self.tblData.setItem(1, 3, QTableWidgetItem("aMC"))
        self.tblData.setItem(1, 4, QTableWidgetItem("aMC"))

        self.tblData.repaint()

        # Get Dataframe and Pointers Ready
        self.UpdateCurrentSelectionsAndFilePointers()
        self.fc.make_ready_data_to_work_on()

The Empty Table

I have tried to populate the QTable with Data

0

There are 0 best solutions below