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 :

proposer une structure


Sujet :

PyQt Python

  1. #1
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut proposer une structure
    Objectif du post : proposer une structure, en vu d’être corrigé et d’aider d’autres débutants.
    Mise en situation : je suis un amateur du développement avec python 3.2 (32 bytes), pyside, sous windows 7, et sur les conseils de Tyrtamos je me suis frotter à la bibliothèque graphique de Pyside. Depuis plusieurs semaines j’essaie de comprendre, de manipuler les objets. Donc je me suis atteler à me faire une structure de base qui pourra me servir pour mes projets futures.
    Tous commentaires sont les biens venus donc n’hésitez pas à me corriger.
    Mes questions :
    - J’ai toujours un message d’erreur lorsque je quitte mon application. J’ai le message suivant sur idle python :

    « Traceback (most recent call last):
    File « C:\Users \Python\Pyside\Structure.pyw", line 151, in <module>
    sys.exit(app.exec_())
    SystemExit: 0
    »

    - Les boites de dialogue ont les boutons en anglais.
    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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    #! /usr/bin/python
    #-*-coding: utf-8 -*-
     
    import sys
    from PySide import QtCore,QtGui
    ####################################### Classe fenetre principale ################################################################
    class Fenetre_Principale(QtGui.QMainWindow):
        def __init__(self):
            QtGui.QMainWindow.__init__(self)
            zonecentrale= QtGui.QWidget()
            self.setCentralWidget(zonecentrale)
    #------------------------------------------------- Taille de la fenetre principale -----------------------------------------------
                #taille de la fenetre principale si taille inferieure
            size_ecran = QtGui.QDesktopWidget().screenGeometry()
            Hauteur=int(size_ecran.height()*.5)
            Largeur=int(size_ecran.width()*.5)
            self.resize(Largeur,Hauteur)
    #------------------------------------------------- Titre de l'application---------------------------------------------------------
            self.setWindowTitle('Fenetre principale')
    #------------------------------------------------- Fond de la fenetre principale -------------------------------------------------
            self.fond = QtGui.QScrollArea(self)
            self.fond.setStyleSheet("background-color: rgb(180,180,180)")
            self.fond.setObjectName("fond")
            self.fondContient = QtGui.QWidget(self.fond)
    #------------------------------------------------- Barre d'information------------------------------------------------------------
                #Creation de la barre de statut avec les informations voulues.
            self.statusBar().showMessage('Structure')
    #------------------------------------------------- Barre de menu------------------------------------------------------------------
                # Creation d'une barre de menu
            menubar = self.menuBar()
    #------------------------------------------------- Menu Fichier-------------------------------------------------------------------
            m_Fichier = menubar.addMenu('Fichier')
            self.menuquit = QtGui.QAction('Quitter', self,shortcut=QtGui.QKeySequence.Close,
                                          statusTip='Quitter l\'application',triggered=self.close)
            m_Fichier.addAction(self.menuquit)#ajout de l'action
    #------------------------------------------------- Barre outil--------------------------------------------------------------------
            self.toolbar = self.addToolBar('Quitter')
            self.toolbar.addAction(self.menuquit)
            self.toolbar.setMovable(False)
    #------------------------------------------------- Elements de la fenetre principale ---------------------------------------------
                #bouton
            self.bouton=QtGui.QPushButton('Lancer la feuille enfant',self.fondContient)
            self.bouton.clicked.connect(self.ouvre_fenetre_enfant)
            self.bouton.move(20,50)
     
     
    #------------------------------------------------- Placement des elements de la fenetre principale -------------------------------
                #determine la taille du fond par rapport aux elements de la fenetre
                #fois 10 pour voir apparaitre les scrollbars sinon le determiner selon les widgets
            Largeur=int(self.width()*10)
            Hauteur=int(self.height()*10)
            self.fondContient.setGeometry(0,0,Largeur,Hauteur)
            self.fondContient.setObjectName("fondContient")
            self.fond.setWidget(self.fondContient)
                #mise en page
            hbox=QtGui.QHBoxLayout()
            hbox.addStretch(1)
            hbox.addWidget(self.fond)
            self.setLayout(hbox)
                #redimensionne le fond
            self.resizeEvent(self.event)
    ##################################### Fonctions fenetre Principale ###############################################################
    #------------------------------------------------- Fonction fermeture de la fenetre principale------------------------------------
        def closeEvent (self, event):
            """Fonction de fermeture de la fenetre principale"""
             #message (Voulez-vous quitter l'application ?)
            reply = QtGui.QMessageBox.question(self,'Attention ?','Voulez-vous quitter l\'application ? ',
                                               QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                                               QtGui.QMessageBox.No)
                #si on clique sur le bouton oui
            if reply == QtGui.QMessageBox.Yes:
                event.accept() #ferme la fenetre
            else:
                event.ignore() #annule pas de fermeture
    #------------------------------------------------- Fonction de redimensionnement de la fenetre principale-------------------------
        def resizeEvent(self, event):
            """redimensionne la fenetre principale"""
            Largeur=int(self.width())
            Hauteur=int(self.height()-self.statusBar().height()-self.toolbar.height()-25)
            V=int(self.toolbar.geometry().top()+self.toolbar.height())
            self.fond.setGeometry(0,V,Largeur,Hauteur)
    #------------------------------------------------- Fonction ouvrir  --------------------------------------------------------------
        def ouvre_fenetre_enfant(self):
            """Fonction qui ouvre la fenetre enfant"""
            self.new=Fenetre_Enfant(self)
            self.new.setWindowFlags(QtCore.Qt.Window)
            self.new.setWindowModality(QtCore.Qt.ApplicationModal)
            self.new.show()
     
     
    ####################################### Classe fenetre enfant ####################################################################
    class Fenetre_Enfant(QtGui.QWidget):
        def __init__(self, parent = None):
            QtGui.QWidget.__init__(self, parent)
            self.parent=parent
    #------------------------------------------------- Taille de la fenetre enfant----------------------------------------------------
                #taille de la fenetre principale si taille inferieure
            size_ecran = QtGui.QDesktopWidget().screenGeometry()
            Hauteur=int(size_ecran.height()*.5)
            Largeur=int(size_ecran.width()*.5)
            self.resize(Largeur,Hauteur)
    #------------------------------------------------- Titre de la fenetre enfant-----------------------------------------------------
            self.setWindowTitle('Fenetre enfant')
    #------------------------------------------------- Fond de la fenetre enfant------------------------------------------------------
            self.fond = QtGui.QScrollArea(self)
            self.fond.setStyleSheet("background-color: rgb(200,200,200)")
            self.fond.setObjectName("fond")
            self.fondContient = QtGui.QWidget(self.fond)
    #------------------------------------------------- Elements de la fenetre enfant--------------------------------------------------
     
     
    #------------------------------------------------- Placement des elements de la fenetre enfant------------------------------------
                #determine la taille du fond par rapport aux elements de la fenetre
            Largeur=int(self.width()*10)
            Hauteur=int(self.height()*10)
            self.fondContient.setGeometry(0,0,Largeur,Hauteur)
            self.fondContient.setObjectName("fondContient")
            self.fond.setWidget(self.fondContient)
                #mise en page
            hbox=QtGui.QHBoxLayout()
            hbox.addStretch(1)
            hbox.addWidget(self.fond,1,0)
            self.setLayout(hbox)
                #redimensionne le fond
            self.resizeEvent(self.event)
     
    ##################################### Fonctions fenetre Mercuriale ###############################################################
        def closeEvent (self, event):
            """Fonction de fermeture de la nouvelle fenetre"""
            self.hide()
    #------------------------------------------------- Fonction de redimensionnement de la fenetre -----------------------------------
        def resizeEvent(self, event):
            """redimensionne la fenetre enfant"""
            Largeur=int(self.width())
            Hauteur=int(self.height())
            self.fond.setGeometry(0,0,Largeur,Hauteur)
    ##################################### Fonctions generales de l'application #######################################################
    #------------------------------------------------- Fonction Centrer une fenetre --------------------------------------------------
    def Centrer(fenetre):
        """Centrer une fenetre"""
        qr = fenetre.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        fenetre.move(qr.topLeft())
     
     
    ##################################### Lancement du programme #####################################################################
    if __name__ == '__main__':
        app = QtGui.QApplication (sys.argv)
        FP = Fenetre_Principale()
        FP.showMaximized()
        sys.exit(app.exec_())

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour avoir les boutons traduits dans les fenêtres de messages, j'ai fait un tuto (PyQt4):

    http://python.jpvweb.com/mesrecettes...t4_traductions

    Il est aussi ici:

    http://pyqt.developpez.com/tutoriels...4/traductions/

    Pour le reste, comme je suis sous Python 2.7 et PyQt4, je te répondrai (enfin, j'essaierai) si personne ne le fait.

    En tout cas, c'est bien de faire des modèles: on gagne beaucoup de temps dans les développements suivants.

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Pour le message, qui n'est pas nécessairement un message d'erreur, il n'apparaît pas sous Linux.

    Par contre j'en ai un pour le layout. Il doit être placé sur zonecentrale et pas sur self.

    Et un conseil, utilise de préférence des layouts plutôt que des setGeometry dans des resizeEvent ou encore ces horreurs de bouton.move(20,50), Les fenêtres dynamiques se font avec des layouts et c'est ainsi que Qt est conçu.

  4. #4
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    Bonjour,
    J'ai vraiment du mal à maîtriser les layouts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VinsS :
    ou encore ces horreurs de bouton.move(20,50)
    j'ai utiliser un QGridLayout en vue d'insérer d'autres widgets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grid=QtGui.QGridLayout()
    grid.addWidget(self.bouton,1,0,alignment=QtCore.Qt.AlignLeft)
    self.fondContient.setLayout(grid)
    la je pense pas trop de problème
    la suite est beaucoup plus délicate.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    VinsS :
    Par contre j'en ai un pour le layout. Il doit être placé sur zonecentrale et pas sur self.
    lorsque je place mon layout de la zone fond sur zonecentrale j'obtiens des résultats autres que ce que je veux, c'est à dire qu'il prenne toute la surface de la fenêtre alors qu'il occupe la moitié droite de la fenêtre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        #mise en page
            hbox=QtGui.QHBoxLayout()
            hbox.addStretch(1)
            hbox.addWidget(self.fond)
            zonecentrale.setLayout(hbox)
    En plus dans mon resizeEvent je n'ai pas accès à ma zone centrale, faut il l'instancier avec self : self.zonecentrale ?
    si j'ai une zone centrale dans mon code c'est parce que j'ai lu qu'il fallait obligatoirement en avoir une même si on ne s'en sert pas et j'avoue ne pas avoir cherché à comprendre

    les layouts permettent d'occuper toute la surface disponible ?
    donc je n'ai pas besoin de resizeEvent ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tyrtamos :
    Pour avoir les boutons traduits dans les fenêtres de messages, j'ai fait un tuto (PyQt4):
    je ferai un autre post je préfère régler les problèmes de placement avant.

    Merci à tous les deux de votre attention.

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si la scrollArea n'occupe que la moitié droite de la fenêtre ce n'est pas à cause de cela, c'est parce que son positionnement est dépendant de resizeEvent, je l'ai constaté en faisant des essais.

    Si je lance ton code tel quel j'ai ce retour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QWidget::setLayout: Attempting to set QLayout "" on Fenetre_Principale "",  which already has a layout
    sans traceback.

    Ton code peut en fait être simplifié comme ceci:
    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
     
    # -*- coding: utf-8 -*-
     
    import sys
     
    from PyQt4 import QtGui
     
    class Fenetre_Principale(QtGui.QMainWindow):
        def __init__(self):
            QtGui.QMainWindow.__init__(self)
            self.resize(600, 400)
            self.centerwidget = QtGui.QWidget()
            self.toplayout = QtGui.QGridLayout(self.centerwidget)
            self.scrollarea = QtGui.QScrollArea(self.centerwidget)
            self.scrollcontent = QtGui.QWidget()
            self.vlayout = QtGui.QVBoxLayout(self.scrollcontent)
            self.hlayout = QtGui.QVBoxLayout()
            self.button = QtGui.QPushButton('Button', self.scrollcontent)
            self.hlayout.addWidget(self.button)
            self.spacer = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
            self.hlayout.addItem(self.spacer)
            self.spacer1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
            self.vlayout.addLayout(self.hlayout)
            self.vlayout.addItem(self.spacer1)
            self.scrollarea.setWidget(self.scrollcontent)
            self.toplayout.addWidget(self.scrollarea)
            self.setCentralWidget(self.centerwidget)
     
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        main = Fenetre_Principale()
        main.show()
        sys.exit(app.exec_())
    Tu remarqueras que la fenêtre peut être redimensionnée, la scrollarea suit le mouvement, plus besion de resizeEvent.

  6. #6
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    un grand merci VinsS c'est exactement ce que je voulais.

    Pour Tyrtamos :
    j'ai ajouté a mon code les lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if __name__ == '__main__':
        app = QtGui.QApplication (sys.argv)
        locale = QtCore.QLocale.system().name()
        translator = QtCore.QTranslator ()
        if os.path.splitext(sys.argv[0])[1] in ['.py', '.pyw']:
            # exécution par l'interpréteur normal
            reptrad = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)
        else:
            # exécution de la version exécutable après cx_Freeze (ou équivalent):
            #les fichiers de traduction doivent se trouver dans "translations"
            reptrad = "translations"
        app.installTranslator(translator)
        FP = Fenetre_Principale()
    la boite de dialogue persiste a garder ses boutons en Anglais ?

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par rob-42 Voir le message
    la boite de dialogue persiste a garder ses boutons en Anglais ?
    Parce qu'il manque une ligne dans ton code.

  8. #8
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    Bonjour Tyrtamos,
    Effectivement j'avais oublié une ligne.
    Mais pas de changement pour les boutons, j'ai bien relu ton tuto et je ne comprends pas pourquoi ca ne marche pas.

    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
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        # pour assurer la traduction automatique du conversationnel à la locale
        locale = QtCore.QLocale.system().name()
        print('Locale : ',locale)
        translator = QtCore.QTranslator ()
        if os.path.splitext(sys.argv[0])[1] in ['.py', '.pyw']:
            # exécution par l'interpréteur normal
            reptrad = (QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath))
        else:
            # exécution de la version exécutable après cx_Freeze (ou équivalent):
            #les fichiers de traduction doivent se trouver dans "translations"
            reptrad = ("translations")
        print('Reptrad : ',reptrad)
        translator.load("qt_" + locale, reptrad)
        app.installTranslator(translator)
        FP = Fenetre_Principale()
        FP.showMaximized()
        sys.exit(app.exec_())
    j'ai fait quelques "print" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> 
    Locale :  fr_FR
    Reptrad :  C:/Python32/Lib/site-packages/PySide/translations
    je ne sais pas si il y a une solution !

  9. #9
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Peut-être cela vient-il de pyside par rapport à pyqt4, ou encore de mon tuto en Python 2.7 alors que tu es sous 3.2.

    Voilà un petit code qui fonctionne en Python 3.2:

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3.2
     
    import sys, os
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    if __name__ == "__main__":
     
        app = QtGui.QApplication(sys.argv)
     
        #========================================================================
        # pour assurer la traduction automatique du conversationnel à la locale
        locale = QtCore.QLocale.system().name()
        translator = QtCore.QTranslator ()
        if os.path.splitext(sys.argv[0])[1] in ['.py', '.pyw']:
            # exécution par l'interpréteur normal
            reptrad = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)
        else:
            # exécution de la version exécutable après cx_freeze (ou équivalent): 
            #les fichiers de traduction doivent se trouver dans "translations"
            reptrad = "translations"
        translator.load("qt_" + locale, reptrad)
        app.installTranslator(translator)
     
        #========================================================================
        rep = QtGui.QMessageBox.question(None, "Titre", "Question",
                     QtGui.QMessageBox.Yes | QtGui.QMessageBox.No | QtGui.QMessageBox.Cancel,
                     QtGui.QMessageBox.Cancel)
     
        if rep == QtGui.QMessageBox.Yes:
            print("oui")
        elif rep == QtGui.QMessageBox.No:
            print("non")
        else:
            print("Annuler") # la touche 'esacape' déclenche aussi 'annuler'   
     
        #sys.exit(app.exec_())
    Qu'est-ce que ça donne en changeant seulement l'importation (PyQt4 => PySide)?

    Si ça ne marche toujours pas, regarde s'il existe un fichier "qt_fr.qm" dans le répertoire C:/Python32/Lib/site-packages/PySide/translations.

  10. #10
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    J'ai testé ton bout de code, il fonctionne quand je clique sur "Yes" il imprime bien "oui"
    J'ai vérifié la présence du fichier dans le répertoire "translations" :
    j'ai "qt_fr" avec l'extension".ts" et non ".qm"

    ma version de Pyside est 1.1.1 pour py 3.2, si ca peut aider.

  11. #11
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Si ça marche, c'est ok!

    Dans la doc (l'assistant de Qt), dans le module QTranslator et sa méthode load, il est expliqué l'algorithme de recherche du fichier. Mais sur le mien, on ne parle pas de .ts mais de .qm.

    Essaie, pour voir, avec cette ligne modifiée, et dis ce que ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    translator.load("qt_" + locale[:2] + ".ts", reptrad)

  12. #12
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    toujours le même résultat
    même une fois compiler avec cx_freeze toujours pareil
    si ce n'est pas possible j'ai toujours la solution de faire une classe de fenêtre de sortie ?

  13. #13
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Par curiosité, j'ai fini par installer PySide (http://qt-project.org/wiki/PySide_Binaries_Windows). Je repoussais ce moment, parce que la dernière fois que je l'ai fait sous Windows, PySide s'est mélangé avec PyQt4, et PyQt4 ne marchait plus.

    Pour être sûr, je l'ai installé sur Windows XP et sur Linux (mint14). J'ai ensuite cherché les fichiers de traduction .ts ... sans les trouver: il n'y a que des fichiers .qm!

    Les fichiers .ts sont des fichiers de traduction modifiables, et une fois la modification faite, ils sont convertis en fichiers.qm, et ce sont eux qui sont utilisés.

    Donc: tu as un problème d'installation!

    Avec PySide sous Windows et sous Linux, mon petit programme d'essai sous Python 3.2 fonctionne parfaitement sans modification, une fois qu'on a mis PySide au lieu de PyQt4 dans l'instruction d'importation.

    Et si j'ajoute ces même lignes de traduction dans ton modèle (ton 1er script. Il faut importer 'os' en plus), ça marche aussi dans le conversationnel pour quitter le programme.

    Suggestion: désinstalle ton PySide, et réinstalle la même version que moi.

  14. #14
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    Bonjour Tyrtamos,
    tu as raison mon pyside était mal installé, j'ai fait ce que tu m'as conseillé et j'ai bien mes boutons en français.
    Un grand merci pour ta persévérance et ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sizeof() d'une structure
    Par tut dans le forum MFC
    Réponses: 12
    Dernier message: 29/08/2006, 18h21
  2. [Initialisation] Remplir une structure une fois
    Par Kimael dans le forum Langage
    Réponses: 14
    Dernier message: 08/06/2004, 15h33
  3. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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