Je suis un débutant et je sais qu'il est quelque chose que j'ai raté mais je ne sais pas exactement ce que, Donc, j'ai un PySide6 application, et j'ai créé une fonction pour générer un calendrier dans un QTableWidget en utilisant le calendrier du module en python tout a bien fonctionné mais le problème est venu quand j'ai essayé d'ajouter un les boutons de navigation pour obtenir la prochaine et mois précédent: C'est ma fonction:
import sys
import os
import platform
import datetime as dt
import time
import calendar
from PySide6 import *
from PySide6 import QtGui
from PySide6 import QtWidgets
from PySide6 import QtCore
from PySide6.QtGui import QColor
from functools import partial
yy = int(dt.datetime.now().strftime("%Y"))
mm = int(dt.datetime.now().strftime("%m"))
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
global widgets
widgets = self.ui
# Calender generator
self.calender_gen(mm,yy)
def calender_gen(self, mm_g, yy_g):
# Creat table rows and columns
widgets.tableWidget_3.setRowCount(5)
widgets.tableWidget_3.setColumnCount(7)
# Table header labels
week_list = ["Sat","Sun","Mon","Tue","Wed","Thu","Fri"]
widgets.tableWidget_3.setHorizontalHeaderLabels(week_list)
# Start inserting days of the month into the table
row = 0
col = 0
for week in calendar.monthcalendar(yy_g,mm_g):
for day in week:
if day == 0:
widgets.tableWidget_3.setItem(row,col,QTableWidgetItem(" "))
else:
widgets.tableWidget_3.setItem(row,col,QTableWidgetItem(str(day)))
col += 1
row += 1
col = 0
print(mm_g,yy_g)
# Connect Buttons to function
widgets.pushButton_3.clicked.connect(partial(self.next_calendar_butt,mm_g,yy_g))
widgets.pushButton_2.clicked.connect(partial(self.prev_calendar_butt,mm_g,yy_g))
def next_calendar_butt(self,mm_new, yy_new):
mm_new += 1
if mm_new > 12:
mm_new = 1
yy_new += 1
widgets.tableWidget_3.setRowCount(0)
widgets.tableWidget_3.setColumnCount(0)
self.calender_gen(mm_new,yy_new)
def prev_calendar_butt(self,mm_g_new,yy_g_new):
mm_g_new -= 1
if mm_g_new == 0:
mm_g_new = 12
yy_g_new -= 1
widgets.tableWidget_3.setRowCount(0)
widgets.tableWidget_3.setColumnCount(0)
self.calender_gen(mm_g_new,yy_g_new)
Quand je lance l'application, le calendrier montre dans le tableau comme dans l'image image de l'interface graphique tableau
La sortie de la Console la Console de tirages de 11 2021
Quand je clique sur pushButton_3 pour la première fois, cliquez sur il fonctionne normalement et imprime '12 2021" dans la console console imprime 12 2021 Mais après que j'ai cliqué sur le même bouton, il commence la duplication: console imprime '12 2021 1 2022' console imprime 12 2021 2022 1 Si je clique à nouveau, il imprime '12 2021 1 2022 1 2022 2 2022' comme dans l'image entrez la description de l'image ici avec chaque clic il reprend de plus là où il devrait imprimer seulement une déclaration que j'ai.e '2 2022'
J'ai essayé de déplacer le dessous des lignes de la calendar_gen fonction() mais je coudn't livrer les paramètres, même après la déclaration de variables globales et de leur attribuer les paramètres :
widgets.pushButton_3.clicked.connect(partial(self.next_calendar_butt,mm_g,yy_g))
widgets.pushButton_2.clicked.connect(partial(self.prev_calendar_butt,mm_g,yy_g))
J'ai essayé de faire ceci: À l'intérieur de la calendar_gen() fonction que j'ai déclaré les variables globales et affectés à des paramètres de la fonction, afin de créer quelque chose comme un paramètre global
global var_mm
global var_yy
var_mm = mm_g
var_yy = yy_g
puis dans le init(self) fonction que j'ai mis ces 2 lignes:
def __init__(self):
widgets.pushButton_3.clicked.connect(partial(self.next_calendar_butt,var_mm,var_yy))
widgets.pushButton_2.clicked.connect(partial(self.prev_calendar_butt,var_mm,var_yy))
Mais cela n'a pas fonctionné dans la console il imprime '11 2021" quand je exécuter l'application, puis quand je clique sur pushButton_3 il imprime '12 2021" et quand je clique de nouveau sur elle, elle imprime '12 2021" de nouveau et ainsi de suite De même avec l'autre bouton, il imprime '10 2021' encore et encore