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
| #!/usr/bin/python3
# -*- coding: utf-8 -*-
# Python 3, PyQt5
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#############################################################################
class Quelclient(QtWidgets.QWidget):
# crée un signal pour envoyer une chaine à la fermeture de la fenêtre
fermeturequelclient = QtCore.pyqtSignal(str)
def __init__(self, parent=None):
"""initialise la fenêtre
"""
super(Quelclient, self).__init__(parent)
self.setWindowTitle("Quel client ?")
self.resize(300,100)
# crée un lineEdit
self.lineEdit = QtWidgets.QLineEdit(self)
# crée un bouton
self.bouton = QtWidgets.QPushButton("Ok", self)
self.bouton.clicked.connect(self.ok_m)
# positionne les widgets dans la fenêtre
posit = QtWidgets.QGridLayout()
posit.addWidget(self.lineEdit, 0, 0)
posit.addWidget(self.bouton, 1, 0)
self.setLayout(posit)
@QtCore.pyqtSlot()
def ok_m(self):
"""ferme la fenêtre en renvoyant par signal le nom du client saisi
dans le QLineEdit
"""
# émet un signal "fermeturequelclient()" avec l'argument cité
self.fermeturequelclient.emit(self.lineEdit.text())
# ferme la fenêtre
self.close()
#############################################################################
class Principal(QtWidgets.QMainWindow):
def __init__(self, parent=None):
"""Initialise la fenêtre
"""
super(Principal, self).__init__(parent)
self.setWindowTitle("Fenêtre principale")
self.resize(300,100)
# met un fond dans le QMainWindow)
self.setCentralWidget(QtWidgets.QFrame())
# crée un lineEdit
self.label = QtWidgets.QLabel(self.centralWidget())
# crée un bouton
self.bouton = QtWidgets.QPushButton("Sélectionnez un client !", self.centralWidget())
self.bouton.clicked.connect(self.quelclient_m)
# positionne les widgets sur le fond de la fenêtre
posit = QtWidgets.QGridLayout()
posit.addWidget(self.bouton, 0, 0)
posit.addWidget(self.label, 1, 0)
self.centralWidget().setLayout(posit)
@QtCore.pyqtSlot()
def quelclient_m(self):
"""Lance la 2ème fenêtre en cas de clic sur le bouton
"""
# crée la 2ème fenêtre
self.quelclient = Quelclient()
# en cas de signal "fermeturequelclient" de self.quelclient
# => exécutera la méthode clienchoisi
self.quelclient.fermeturequelclient.connect(self.clientchoisi)
# rend modale la 2ème fenêtre (la 1ère fenêtre sera inactive)
self.quelclient.setWindowModality(QtCore.Qt.ApplicationModal)
# affiche la 2ème fenêtre
self.quelclient.show()
@QtCore.pyqtSlot(str)
def clientchoisi(self, client):
"""affiche le nom du client transmis par le signal 'fermeturequelclient'
à l'arrêt de la 2ème fenêtre
"""
self.label.setText("Client: %s" % client)
#############################################################################
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create('plastique'))
main = Principal()
main.show()
sys.exit(app.exec_()) |
Partager