#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Mar 28 09:45:30 2017 @author: fh Examen de David Cassagne. """ import numpy as np import matplotlib.pyplot as plt import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel, QLineEdit, QCheckBox, QGroupBox from PyQt5.QtCore import Qt """ Interface graphique - dipositif de sécurité à 4 cases """ class Digicode(QWidget): def __init__(self): QWidget.__init__(self) self.setWindowTitle("Digicode") self.resize(250,250) self.layout=QVBoxLayout()#Mettre en forme. self.setLayout(self.layout) self.cocheA=QCheckBox("A") self.cocheA.clicked.connect(self.set_affiche) self.layout.addWidget(self.cocheA) self.cocheB=QCheckBox("B") self.cocheB.clicked.connect(self.set_affiche) self.layout.addWidget(self.cocheB) self.cocheC=QCheckBox("C") self.cocheC.clicked.connect(self.set_affiche) self.layout.addWidget(self.cocheC) self.cocheD=QCheckBox("D") self.cocheD.clicked.connect(self.set_affiche) self.layout.addWidget(self.cocheD) self.affiche=QLabel("Affiche: Éteint") self.layout.addWidget(self.affiche) def set_affiche(self): a=self.cocheA.checkState() b=self.cocheB.checkState() c=self.cocheC.checkState() d=self.cocheD.checkState() oui=Qt.Checked; non=Qt.Unchecked if a==oui and b==non and c==oui and d==non: self.affiche.setText("Affiche: Allumé") else: self.affiche.setText("Affiche: Éteint") def ctrlfenDigicode(): # Premiere etape : creation d'une application Qt avec QApplication # afin d'avoir un fonctionnement correct avec IDLE ou Canopy # on verifie s'il existe deja une instance de QApplication app = QApplication.instance() if not app: # sinon on cree une instance de QApplication app = QApplication(sys.argv) # creation d'une fenetre avec QWidget dont on place la reference dans fen fen = Digicode() # la fenetre est rendue visible fen.show() # execution de l'application, l'execution permet de gerer les evenements app.exec_() #ctrlfenDigicode() """ Gestion d'un mois et d'une année """ class Calendrier(QWidget): def __init__(self): QWidget.__init__(self) self.setWindowTitle("Calendrier") self.resize(250,250) self.layout=QVBoxLayout()#Mettre en forme. self.setLayout(self.layout) self.champ_mois=QLabel("Mois : 01") self.layout.addWidget(self.champ_mois) self.mmois=QPushButton("-mois") self.mmois.clicked.connect(self.set_mmois) self.layout.addWidget(self.mmois) self.pmois=QPushButton("+mois") self.pmois.clicked.connect(self.set_pmois) self.layout.addWidget(self.pmois) self.champ_annee=QLabel("Année : 2015") self.layout.addWidget(self.champ_annee) self.mannee=QPushButton("-année") self.mannee.clicked.connect(self.set_mannee) self.layout.addWidget(self.mannee) self.pannee=QPushButton("+année") self.pannee.clicked.connect(self.set_pannee) self.layout.addWidget(self.pannee) self.avance=QCheckBox("Avance Rapide") self.avance.clicked.connect(self.rapide) self.layout.addWidget(self.avance) def set_mmois(self): mois=self.champ_mois.text() m=int(mois[7:9]) annee=self.champ_annee.text() a=int(annee[8:12]) if m==1: self.champ_mois.setText("Mois : 12") self.champ_annee.setText("Année : {}".format(a-1)) else: self.champ_mois.setText("Mois : {}".format(str(m-1).zfill(2))) def set_pmois(self): mois=self.champ_mois.text() m=int(mois[7:9]) annee=self.champ_annee.text() a=int(annee[8:12]) if m==12: self.champ_mois.setText("Mois : 01") self.champ_annee.setText("Année : {}".format(a+1)) else: self.champ_mois.setText("Mois : {}".format(str(m+1).zfill(2))) def set_mannee(self): annee=self.champ_annee.text() a=int(annee[8:12]) self.champ_annee.setText("Année : {}".format(str(a-1).zfill(4))) def set_pannee(self): annee=self.champ_annee.text() a=int(annee[8:12]) self.champ_annee.setText("Année : {}".format(str(a+1).zfill(4))) def rapide(self): c=self.avance.checkState() oui=Qt.Checked; non=Qt.Unchecked if c==oui: self.mmois.clicked.disconnect(self.set_mmois) self.pmois.clicked.disconnect(self.set_pmois) self.pannee.clicked.disconnect(self.set_pannee) self.mannee.clicked.disconnect(self.set_mannee) self.mmois.clicked.connect(self.set_rmmois) self.pmois.clicked.connect(self.set_rpmois) self.pannee.clicked.connect(self.set_rpannee) self.mannee.clicked.connect(self.set_rmannee) elif c==non: self.mmois.clicked.disconnect(self.set_rmmois) self.pmois.clicked.disconnect(self.set_rpmois) self.pannee.clicked.disconnect(self.set_rpannee) self.mannee.clicked.disconnect(self.set_rmannee) self.mmois.clicked.connect(self.set_mmois) self.pmois.clicked.connect(self.set_pmois) self.pannee.clicked.connect(self.set_pannee) self.mannee.clicked.connect(self.set_mannee) def set_rmmois(self): mois=self.champ_mois.text() m=int(mois[7:9]) annee=self.champ_annee.text() a=int(annee[8:12]) if m==1: self.champ_mois.setText("Mois : 10") self.champ_annee.setText("Année : {}".format(a-1)) elif m==2: self.champ_mois.setText("Mois : 11") self.champ_annee.setText("Année : {}".format(a-1)) elif m==3: self.champ_mois.setText("Mois : 12") self.champ_annee.setText("Année : {}".format(a-1)) else: self.champ_mois.setText("Mois : {}".format(str(m-3).zfill(2))) def set_rpmois(self): mois=self.champ_mois.text() m=int(mois[7:9]) annee=self.champ_annee.text() a=int(annee[8:12]) if m==10: self.champ_mois.setText("Mois : 01") self.champ_annee.setText("Année : {}".format(a+1)) elif m==11: self.champ_mois.setText("Mois : 02") self.champ_annee.setText("Année : {}".format(a+1)) elif m==12: self.champ_mois.setText("Mois : 03") self.champ_annee.setText("Année : {}".format(a+1)) else: self.champ_mois.setText("Mois : {}".format(str(m+2).zfill(2))) def set_rmannee(self): annee=self.champ_annee.text() a=int(annee[8:12]) self.champ_annee.setText("Année : {}".format(str(a-10).zfill(4))) def set_rpannee(self): annee=self.champ_annee.text() a=int(annee[8:12]) self.champ_annee.setText("Année : {}".format(str(a+10).zfill(4))) def ctrlfenCalendrier(): # Premiere etape : creation d'une application Qt avec QApplication # afin d'avoir un fonctionnement correct avec IDLE ou Canopy # on verifie s'il existe deja une instance de QApplication app = QApplication.instance() if not app: # sinon on cree une instance de QApplication app = QApplication(sys.argv) # creation d'une fenetre avec QWidget dont on place la reference dans fen fen = Calendrier() # la fenetre est rendue visible fen.show() # execution de l'application, l'execution permet de gerer les evenements app.exec_() #ctrlfenCalendrier() """ Interface graphique - Echange de messages entre trois fenêtres(Cassé) """ class Chat0(QWidget): def __init__(self): QWidget.__init__(self) self.nom="vide" self.vsn0=self self.vsn1=self self.setWindowTitle(self.nom) self.resize(250,250) self.layout=QVBoxLayout()#Mettre en forme. self.setLayout(self.layout) self.texto=QLabel("texto") self.layout.addWidget(self.texto) self.redac=QLineEdit("Tape ici.") self.layout.addWidget(self.redac) self.groupe=QGroupBox("Boîte à bouttons") self.groupe_layout=QVBoxLayout(self.groupe) self.setLayout(self.groupe_layout) self.layout.addWidget(self.groupe) self.valide0=QPushButton("Envoi {}".format(self.vsn0.nom)) self.valide0.clicked.connect(self.envoi0) self.groupe_layout.addWidget(self.valide0) self.valide1=QPushButton("Envoi {}".format(self.vsn1.nom)) self.valide1.clicked.connect(self.envoi1) self.groupe_layout.addWidget(self.valide1) def envoi0(self): txt=self.redac.text() txt0=self.vsn0.texto.text() self.vsn0.texto.setText(txt0+"\n"+txt) def envoi1(self): txt=self.redac.text() txt0=self.vsn1.texto.text() self.vsn1.texto.setText(txt0+"\n"+txt) class Chat(QWidget): def __init__(self,user,v0,v1): QWidget.__init__(self) self.nom=user self.vsn0=v0 self.vsn1=v1 self.setWindowTitle(self.nom) self.resize(250,250) self.layout=QVBoxLayout()#Mettre en forme. self.setLayout(self.layout) self.texto=QLabel("texto") self.layout.addWidget(self.texto) self.redac=QLineEdit("Tape ici.") self.layout.addWidget(self.redac) self.groupe=QGroupBox("Boîte à bouttons") self.groupe_layout=QVBoxLayout(self.groupe) self.setLayout(self.groupe_layout) self.layout.addWidget(self.groupe) self.valide0=QPushButton("Envoi {}".format(self.vsn0.nom)) self.valide0.clicked.connect(self.envoi0) self.groupe_layout.addWidget(self.valide0) self.valide1=QPushButton("Envoi {}".format(self.vsn1.nom)) self.valide1.clicked.connect(self.envoi1) self.groupe_layout.addWidget(self.valide1) def envoi0(self): txt=self.redac.text() txt0=self.vsn0.texto.text() self.vsn0.texto.setText(txt0+"\n"+txt) def envoi1(self): txt=self.redac.text() txt0=self.vsn1.texto.text() self.vsn1.texto.setText(txt0+"\n"+txt) def ctrlfenChat(): # Premiere etape : creation d'une application Qt avec QApplication # afin d'avoir un fonctionnement correct avec IDLE ou Canopy # on verifie s'il existe deja une instance de QApplication app = QApplication.instance() if not app: # sinon on cree une instance de QApplication app = QApplication(sys.argv) # creation d'une fenetre avec QWidget dont on place la reference dans fen c0=Chat0();fenAlice=Chat("",c0,c0);fenEve=Chat("",c0,c0);fenBob=Chat("",c0,c0);fenAlice=Chat("Alice",fenBob,fenEve);fenBob=Chat("Bob",fenEve,fenAlice);fenEve=Chat("Ève",fenAlice,fenBob);fenAlice=Chat("Alice",fenBob,fenEve);fenBob=Chat("Bob",fenEve,fenAlice);fenEve=Chat("Ève",fenAlice,fenBob) # la fenetre est rendue visible fenAlice.show();fenBob.show();fenEve.show() # execution de l'application, l'execution permet de gerer les evenements app.exec_() #ctrlfenChat() class ChatOrigin(QWidget): def __init__(self,titre,Voisin0,Voisin1): QWidget.__init__(self) self.Voisin0=Voisin0 self.Voisin1=Voisin1 self.titre=titre self.setWindowTitle(self.titre) self.resize(250,250) self.layout=QVBoxLayout() self.setLayout(self.layout) self.lu=QLabel("Lis ici") self.layout.addWidget(self.lu) self.ecrit=QLineEdit("Tape ici.") self.layout.addWidget(self.ecrit) self.groupe=QGroupBox("Boîte à bouttons") self.groupe_layout=QVBoxLayout(self.groupe) self.setLayout(self.groupe_layout) self.layout.addWidget(self.groupe) self.envoyer0=QPushButton("Envoie à 0") self.envoyer0.clicked.connect(self.Voisin0) self.groupe_layout.addWidget(self.envoyer0) self.envoyer1=QPushButton("Envoie à 1") self.envoyer1.clicked.connect(self.Voisin1) self.groupe_layout.addWidget(self.envoyer1) def envoi0(self): recu=self.Voisin0.lu.text() emis=self.ecrit.text() self.Voisin0.lu.setText("{}\n{}".format(recu,emis)) def envoi1(self): recu=self.Voisin1.lu.text() emis=self.ecrit.text() self.Voisin1.lu.setText("{}\n{}".format(recu,emis)) class Alice(ChatOrigin): def __init__(self): ChatOrigin.__init__(self) def ctrlChatO(): app = QApplication.instance() if not app : app = QApplication(sys.argv) fen=ChatOrigin() fen.show() app.exec_() ctrlChatO() """ Animation - Corpuscules dans une boîte """ def pointsBoite(vitesse=1,N=5): plt.plot([0,0,40,40,0],[0,40,40,0,0]) v=np.zeros([2,N]) r0=np.ones([2,N])*20 for i in range(N): theta=np.random.rand()*2*np.pi v[0,i]=vitesse*np.cos(theta) v[1,i]=vitesse*np.sin(theta) for t in range(80):# Nombre d'itérations. r=t*v+r0 for p in range(2): for q in range(N): r[p,q]=r[p,q]%40 if t == 0: line, = plt.plot(r[0],r[1],"o",lw=3) else: line.set_xdata(r[0]) line.set_ydata(r[1]) plt.title("Temps : {}/{}".format(t,80-1)) plt.pause(0.0005) # pause avec duree en secondes plt.show() #pointsBoite(2,5) """ Animation d'orbite élliptique. """ def rellipse(t,e=1,omega=2*np.pi/10): return np.array([np.cos(omega*t),np.sin(omega*t)/e]) def orbite(e=1,omega=2*np.pi/10): T=np.linspace(0,1000,1001) R=rellipse(T,e,2*np.pi/1000) plt.plot(R[0],R[1],lw=2) for t in range(101): r=rellipse(t,e,omega) if t == 0: line, = plt.plot(r[0],r[1],"o",lw=10) else: line.set_xdata(r[0]) line.set_ydata(r[1]) plt.title("Temps : {}/{}".format(t,101-1)) plt.pause(0.00005) # pause avec duree en secondes plt.show() #orbite(2,2*np.pi/40)