Issue
I'm trying to refresh my table display when I want to add a new row. The rows of the table are added but on the display there is no change.
I don't know how to update the display so that the line I just added is visible on the window.
I guess that when adding a line you have to call back the display function, but what I tried doesn't work. Maybe we have to add the Widget again to the layout of the tab but in this case I want to help a little because I don't know how to do it.
Constructor :
def __init__(self, parent=None):
super(MainUI, self).__init__(parent)
# onglet "Dépenses"
self.tabDepense = QWidget()
# onglet "Budgets"
self.tabBudgets = QWidget()
# onglet "Bilan"
self.tabBilan = QWidget()
self.data = Data()
self.budgets = Budget()
self.dicoBudgets = []
self.budgetsTab = QTableWidget()
self.addTab(self.tabDepense, "Dépenses")
self.addTab(self.tabBudgets, "Budgets")
self.addTab(self.tabBilan, "Bilan")
# affichage des onglets
self.ongletDepense()
self.ongletBudgets()
self.bilanTab()
# paramètres de la fenêtre
self.setWindowTitle("Gestionnaire de dépense")
self.setFixedSize(QSize(1350, 750))
The tab where the display should be :
def ongletBudgets(self):
print("ONGLET **BUDGET**")
# creation of the different layouts
layout = QVBoxLayout()
# loading of the files countained in the repertory
choixMois = QComboBox()
# récupération des mois
# pas d'appel à loadFile() car sinon création de doublons
listMois = self.data.getMois()
# ajout des mois dans la ComboBox de choix des mois
for i in range(len(listMois)):
choixMois.addItem(listMois[i])
self.remplirDico()
if(len(self.dicoBudgets) == 0):
# création d'un tableau vide
situationBudgetsTab = QTableWidget(len(self.dicoBudgets), 2, self)
situationBudgetsTab.setHorizontalHeaderLabels(['Nom Budget', 'Situation Budget'])
else:
# création du tableau représentant la situation des dépenses par rapport au budget
situationBudgetsTab = QTableWidget(len(self.dicoBudgets), 2, self)
# setup des colonnes
situationBudgetsTab.setHorizontalHeaderLabels(['Nom Budget', 'Situation Budget'])
# rangement des valeurs dans le tableau
for j in range(situationBudgetsTab.rowCount()-1):
nom = QTableWidgetItem(self.dicoBudgets[j][0])
# rangement de la valeur à la position courante
situationBudgetsTab.setItem(j, 0, nom)
s = str(self.dicoBudgets[j][1])
# on veut savoir à combien nous sommes de la limite de budget fixée
situation = QTableWidgetItem("0" + "/" + s[:-1])
# rangement de la valeur à la position courante
situationBudgetsTab.setItem(j, 1, situation)
j = situationBudgetsTab.rowCount()-1
# ajout du dernier élément en dur pas de '\n' ) supprimer
nom = QTableWidgetItem(self.dicoBudgets[j][0])
situationBudgetsTab.setItem(j, 0, nom)
situation = QTableWidgetItem("0" + "/" + str(self.dicoBudgets[j][1]))
situationBudgetsTab.setItem(j, 1, situation)
# formulaire pour ajouter un budget
dateLabel = QLabel("Nom")
lineEdit1 = QLineEdit()
montantLabel = QLabel("MontantMax")
lineEdit2 = QLineEdit()
addButton = QPushButton("Ajouter", self)
addButton.setCheckable(True)
addButton.clicked.connect(lambda: self.majBudget(lineEdit1.text(), lineEdit2.text()))
# ajout des Widget dans le layout principal
layout.addWidget(choixMois)
layout.addWidget(self.printBudgetsTab())
layout.addWidget(situationBudgetsTab)
layout.addWidget(dateLabel)
layout.addWidget(lineEdit1)
layout.addWidget(montantLabel)
layout.addWidget(lineEdit2)
layout.addWidget(addButton)
# affichage de ce layout
self.tabBudgets.setLayout(layout)
The update method :
def majBudget(self, nomBudget: QLineEdit, montantMax: QLineEdit):
# # ajout du budget dans le fichier Budget.txt
self.budgets.addBudgetInFile(nomBudget, montantMax)
self.clearDico()
# # mise à jour de l'affichage
self.printBudgetsTab()
The table display method :
def printBudgetsTab(self):
# replisssage du dico avec les valeurs présentes dans le fichier
self.remplirDico()
# si le dictionnaire est vide, on créé juste un tableau vide
if(not self.dicoBudgets):
# création d'un tableau vide
budgetsTab = QTableWidget(len(self.dicoBudgets), 2, self)
# addition of columns
budgetsTab.setHorizontalHeaderLabels(['Nom Budget', 'Montant Budget'])
# sinon on range les valeurs présentes dans le dictionnaire dans le tableau
else:
# création du tableau des budgets
budgetsTab = QTableWidget(len(self.dicoBudgets), 2, self)
# addition of columns
budgetsTab.setHorizontalHeaderLabels(['Nom Budget', 'Montant Budget'])
# rangement des valeurs dans le tableau des budgets
for i in range(len(self.dicoBudgets)):
print(self.dicoBudgets)
nom = QTableWidgetItem(self.dicoBudgets[i][0])
budgetsTab.setItem(i, 0, nom)
s = str(self.dicoBudgets[i][1])
montantMax = QTableWidgetItem(s[:-1])
budgetsTab.setItem(i, 1, montantMax)
i = budgetsTab.rowCount()-1
# ajout du dernier élément en dur pas de '\n' ) supprimer
nom = QTableWidgetItem(self.dicoBudgets[i][0])
budgetsTab.setItem(i, 0, nom)
montantMax = QTableWidgetItem(str(self.dicoBudgets[i][1]))
budgetsTab.setItem(i, 1, montantMax)
return budgetsTab
Solution
If you want to refresh your table display then you should use the call update()
Add this after you add a new row:
situationBudgetsTab.update()
You could also use the repaint method which then for example you could use the following code to add 2 new rows to your table
# Sets the number of rows to the current amount +2.
situationBudgetsTab.setRowCount(situationBudgetsTab.rowCount() + 2)
situationBudgetsTab.update()
Answered By - Orpheus
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.