IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

un calendrier en français


Sujet :

PyQt Python

  1. #1
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 39
    Points : 41
    Points
    41
    Billets dans le blog
    1
    Par défaut un calendrier en français
    Bonsoir, je travaille sur une app et j'utilise QDateEdit. Ce qui permet d'avoir un calendrier, maintenant j'aimerais que l'affichage du calendrier soit en français ou est-ce que la langue d'affichage du calendrier dépend de la langue du système d'exploitation??

    Merci

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Merci d'avoir posé la question: je n'avais jamais utilisé QDateEdit...

    J'ai essayé, et ça me donne du français sur mon Windows français, sans que je demande quoi que ce soit comme traduction.

    Par contre, on peut demander, toujours sous le Windows français, n'importe quelle autre langue.

    Voilà un petit exemple test pour affichage du mois en espagnol:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys, os
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    class Fenetre(QtGui.QWidget):
     
        def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
     
            self.datedit = QtGui.QDateEdit(self)
            self.datedit.setDisplayFormat("d MMMM yyyy") 
            locale = QtCore.QLocale(QtCore.QLocale.Spanish, QtCore.QLocale.Spain)
            self.datedit.setLocale(locale)
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.datedit, 0, 0)
            self.setLayout(posit)
     
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        fen.show()
        sys.exit(app.exec_())
    Pour les autres langues, il faut voir la doc concernant QCore.QLocale
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 39
    Points : 41
    Points
    41
    Billets dans le blog
    1
    Par défaut
    Merci beaucoup j'ai résolu mon problème. Et j'ai une autre question. Le code parlerait plus vite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            dateLabel = QLabel("Date :")
            self.dateEtatEdit = QDateEdit()
            self.dateEtatEdit.setDate(QDate.currentDate())
            self.dateEtatEdit.setDisplayFormat("dd/MM/yyyy")
            self.dateEtatEdit.setCalendarPopup(True)
            self.dateEtatEdit.calendarWidget().installEventFilter(self)
            locale = QLocale(QLocale.French, QLocale.BurkinaFaso)
            self.dateEtatEdit.setLocale(locale)
    voici le code de mon qdateedit, il se trouve dans un widget personnalisé lequel est utilisé dans un qstackwidget que j'utilise dans un qmainwindow comme central widget. Le problème est que cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.dateEtatEdit.calendarWidget().installEventFilter(self)
    est censé faire en sorte que le calendrier se positionne sur la même ligne que le coté droit de qdateedit. Mais il sort complètement de ma fenêtre...

    voici le code de l'eventfilter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def eventFilter(self, obj, event):
            if obj == self.dateEtatEdit.calendarWidget() and event.type() == QEvent.Show:
                pos = self.dateEtatEdit.mapToGlobal(self.dateEtatEdit.geometry().bottomRight())
                width = self.dateEtatEdit.calendarWidget().window().width()
                self.dateEtatEdit.calendarWidget().window().move(pos.x() - width, pos.y())
            return False
    Merci pour l'aide.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par kekule10 Voir le message
    Le problème est que cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.dateEtatEdit.calendarWidget().installEventFilter(self)
    est censé faire en sorte que le calendrier se positionne sur la même ligne que le coté droit de qdateedit. Mais il sort complètement de ma fenêtre...
    A mon avis, ce genre de calcul de positionnement est à réserver à des cas désespérés...

    Je te propose plutôt des positionnements automatiques avec QStackedWidget.

    Voilà un petit exemple pour test. La pile comporte 3 panneaux qui vont s'afficher l'un après l'autre à chaque fois qu'on clique sur le bouton:
    - un QDateEdit seul (class Pano1)
    - un QCalendarWidget seul (class Pano2)
    - un ensemble (class Pano3) composé d'un QDateEdit suivi d'un QCalendarWidget sur la même ligne, et liés ensemble par la date sélectionnée

    A voir les positionnements par des QGridLayout à 2 niveaux: dans les classes "Pano" et dans le QMainWindow. Essayer le redimensionnement de la fenêtre pour constater le redimensionnement des widgets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys, os
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    class Pano1(QtGui.QWidget):
        """QDateEdit seul"""
     
        def __init__(self, parent=None):
            super(Pano1,self).__init__(parent)
     
            locale = QtCore.QLocale(QtCore.QLocale.Spanish, QtCore.QLocale.Spain)
     
            self.datedit = QtGui.QDateEdit(self)
            self.datedit.setDisplayFormat("d MMMM yyyy") 
            self.datedit.setLocale(locale)
            self.datedit.setDate(QtCore.QDate.currentDate())
            self.datedit.setFixedWidth(self.datedit.width())
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.datedit, 0, 0)
            self.setLayout(posit)
     
    #############################################################################
    class Pano2(QtGui.QWidget):
        """QCalendarWidget seul"""
     
        def __init__(self, parent=None):
            super(Pano2,self).__init__(parent)
     
            locale = QtCore.QLocale(QtCore.QLocale.Spanish, QtCore.QLocale.Spain)
     
            self.calend = QtGui.QCalendarWidget()
            self.calend.setLocale(locale)
            self.calend.setSelectedDate(QtCore.QDate.currentDate())
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.calend, 0, 0)
            self.setLayout(posit)
     
    #############################################################################
    class Pano3(QtGui.QWidget):
        """ensemble composé d'un QDateEdit et d'un QCalendarWidget liés"""
     
        def __init__(self, parent=None):
            super(Pano3,self).__init__(parent)
     
            self.datedit = QtGui.QDateEdit(self)
            self.datedit.setDisplayFormat("d MMMM yyyy") 
            locale = QtCore.QLocale(QtCore.QLocale.Spanish, QtCore.QLocale.Spain)
            self.datedit.setLocale(locale)
            self.datedit.setDate(QtCore.QDate.currentDate())
     
            self.datedit.setCalendarPopup(True)
            self.calend = self.datedit.calendarWidget()
            self.calend.setLocale(locale)
     
            posit = QtGui.QGridLayout()
            posit.addWidget(self.datedit, 0, 0)
            posit.addWidget(self.calend, 0, 1)
            self.setLayout(posit)
     
    #############################################################################
    class Fenetre(QtGui.QMainWindow):
     
        def __init__(self, parent=None):
            super(Fenetre,self).__init__(parent)
     
            self.pano1 = Pano1()
            self.pano2 = Pano2()
            self.pano3 = Pano3()
     
            # création de la pile des widgets
            self.pile = QtGui.QStackedWidget()
            self.pile.addWidget(self.pano1)
            self.pile.addWidget(self.pano2)
            self.pile.addWidget(self.pano3)
     
            self.npilemax = self.pile.count() # nb de widgets de la pile
            self.npile = 0
     
            # bouton pour changer le panneau affiché
            self.bouton = QtGui.QPushButton("Panneau suivant", self)
            self.bouton.clicked.connect(self.boutonclic)  
     
            # positionnement de la pile et du bouton
            self.setCentralWidget(QtGui.QFrame())
            posit = QtGui.QGridLayout()
            posit.addWidget(self.pile, 0, 0)
            posit.addWidget(self.bouton, 1, 0)
            self.centralWidget().setLayout(posit)
     
        def boutonclic(self, b):   
            """pour changer le widget affiché"""
            self.npile += 1
            if self.npile==self.npilemax:
                self.npile = 0
            self.pile.setCurrentIndex(self.npile)     
     
    #############################################################################
    if __name__ == "__main__":
     
        #
        app = QtGui.QApplication(sys.argv)
     
        # pour assurer la traduction des QMessageBox à la locale
        locale = QtCore.QLocale.system().name()
        translator = QtCore.QTranslator ()
        reptrad = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)
        translator.load("qt_" + locale, reptrad)
        app.installTranslator(translator)
     
        #
        fen = Fenetre()
        fen.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        fen.show()
        sys.exit(app.exec_())
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    J'ai testé le code de Kekule10, et le popup est correctement aligné sur le bord droit du QDateEdit.

    Maintenant si tu veux dire que le popup sort de l'écran c'est inévitable si tu forces le positionnement du widget.

    Tu dois donc prendre en compte l'espace écran disponible vers le bas et la gauche et appliquer la correction nécessaire au popup, comme c'est le cas dans le code source du QMenu.

    https://qt.gitorious.org/qt/qt/sourc...gets/qmenu.cpp

  6. #6
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 39
    Points : 41
    Points
    41
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    J'ai testé le code de Kekule10, et le popup est correctement aligné sur le bord droit du QDateEdit.
    Effectivement, moi aussi j'ai fait un test qui marche mais seulement si j'utilise directement mon QDateEdit dans un QDialog directement.


    Maintenant si tu veux dire que le popup sort de l'écran c'est inévitable si tu forces le positionnement du widget.
    Oui, une partie de mon popup sort de mon écran mais je n'ai pas fait de forcing de positionnement. Voici comment j'ai procedé: j'ai créé une "fenêtre" derivée de QWidget et dans celle-ci j'ai placé mon QDateEdit. Dans mon QMainWindow, j'ai un QSackedWidget pour afficher ma "fenêtre". Je pense que le problème vient de là. Comment l'avez-vous testé?

    Merci

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    N'oublie pas de regarder ma réponse: avec mes 2 x QGridLayouts, je n'ai aucun problème de positionnement.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    @ tyrtamos, le popup se positionne correctement parce que le système vérifie s'il dispose de suffisamment de place écran sinon il déplace.

    Seulement Kekule10 a rajouté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def eventFilter(self, obj, event):
            if obj == self.dateEtatEdit.calendarWidget() and event.type() == QEvent.Show:
                pos = self.dateEtatEdit.mapToGlobal(self.dateEtatEdit.geometry().bottomRight())
                width = self.dateEtatEdit.calendarWidget().window().width()
                self.dateEtatEdit.calendarWidget().window().move(pos.x() - width, pos.y())
            return False
    (c'est ce code là que j'ai testé)

    et dans ce cas il lui appartient de vérifier si il dispose de l'espace écran nécessaire et de corriger le cas non-échéant.

  9. #9
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Merci VinsS. Comme je ne comprenais pas à quoi lui servait eventFilter, j'ai cherché une solution qui marchait sans.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  10. #10
    Membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 39
    Points : 41
    Points
    41
    Billets dans le blog
    1
    Par défaut
    merci VinsS, j'ai mis du temps essayer diverses manière pour me satisfaire mais hélas du coup j'ai fait quelque que je n'aime pas en tant que programmeur : j'étais obligé de faire le placement du calendarwidget manuellement et conséquence la fenêtre principale ne doit plus être redimensionnée. Vous voyez comment c'est pas interessant!!!!!!

    Merci

Discussions similaires

  1. [RichFaces] Calendrier français
    Par razanamavo dans le forum JSF
    Réponses: 2
    Dernier message: 12/06/2012, 23h15
  2. Calendrier en français
    Par Alpoids dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 25/06/2011, 16h00
  3. Réponses: 2
    Dernier message: 13/06/2002, 14h50
  4. Existe-t-il un langage de prog "virtuel" en Français
    Par HRS dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 10/06/2002, 18h11
  5. Réponses: 0
    Dernier message: 07/05/2002, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo