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_())