Liaison Socket / Tkinter

Fermé
Arm - 2 mars 2020 à 12:04
 Arm - 5 mars 2020 à 16:31
Bonjour, pour un projet je souhaite réaliser une interface graphique Tkinter qui permettrait d'envoyer des données via Socket (images et textes). Le programme gère client ET serveur, il faut juste sélectionner de quel côté nous voulons aller. Mon problème c'est que je ne sais comment faire fonctionner l'attente du socket côté client puisqu'avec un while true la mainloop Tkinter ne fonctionne pas et la fenêtre ne fonctionne plus, ce qui est logique.
Merci de votre aide


Voici mon code:
import tkinter as tk
from tkinter.filedialog import *
from tkinter.messagebox import *
import socket

import time


global socket
global client
global log




def Accueil():
global root
root = tk.Tk()

root.title("Espace élèves")
root.config(bg='#A26F65')
root.geometry('1650x1050')

entete = tk.Label(root, text='Bienvenue sur votre espace pedagogique !', font = ('Tw Cen MT', 30))
entete.place(x=490, y=200, anchor='w')

Bouton = tk.Button(root, text ="Espace élèves",command = eleve, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white")
Bouton.place(x=500, y=400, anchor='w')

Bouton = tk.Button(root, text ="Espace professeur",command = prof, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white")
Bouton.place(x=1000, y=400, anchor='w')

Bouton = tk.Button(root, text ='Quitter',command = quitterAccueil, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
Bouton.place(x=1500, y=900, anchor='se' )


root.mainloop()





def prof():
quitterAccueil()
global prof1
prof1 = tk.Tk()
prof1.title("Espace professeurs")
prof1.config(bg='#A26F65')
prof1.geometry('1650x1050')

global Motdepasseprof
Motdepasseprof = tk.StringVar()
Champ = tk.Entry(prof1, textvariable= Motdepasseprof, show='*', bg ='bisque', fg='black')
Champ.focus_set()
Champ.place(x=780, y=300, anchor='w')

Bouton = tk.Button(prof1, text ="Quitter",command = quitterMDPprof, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
Bouton.place(x=1500, y=900, anchor='w')


Bouton = tk.Button(prof1, text ="Valider",command = VerificationProf, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white")
Bouton.place(x=805, y=400, anchor='w')

entete = tk.Label(prof1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20))
entete.place(x=700, y=200, anchor='w')

Bouton = tk.Button(prof1, text ="Retour",command = RetourAccueilPr, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
Bouton.place(x=1400, y=900, anchor='w')

prof1.mainloop()





def eleve():
quitterAccueil()
global eleve1
eleve1 = tk.Tk()
eleve1.title("Espace élèves")
eleve1.config(bg='#A26F65')
eleve1.geometry('1650x1050')

global Motdepasseeleve
Motdepasseeleve= tk.StringVar()
Champ = tk.Entry(eleve1, textvariable= Motdepasseeleve, show='*', bg ='bisque', fg='black')
Champ.focus_set()
Champ.place(x=780, y=300, anchor='w')

Bouton = tk.Button(eleve1, text ="Valider",command = VerificationEleve, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white")
Bouton.place(x=805, y=400, anchor='w')

Bouton = tk.Button(eleve1, text ="Quitter",command = quitterMDPeleve, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
Bouton.place(x=1500, y=900, anchor='w')

Bouton = tk.Button(eleve1, text ="Retour",command = RetourAccueilEl, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
Bouton.place(x=1400, y=900, anchor='w')

entete = tk.Label(eleve1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20))
entete.place(x=700, y=200, anchor='w')

eleve1.mainloop()





def VerificationEleve():
if Motdepasseeleve.get() == 'eleve':
showinfo('Résultat','Mot de passe correct')
eleve2()

else:
showwarning('Résultat','Mot de passe incorrect')
Motdepasseeleve.set('')






def VerificationProf():
if Motdepasseprof.get() == 'prof':
showinfo('Résultat','Mot de passe correct!')
prof2()

else:
showwarning('Résultat','Mot de passe incorrect!')
Motdepasseprof.set('')




def prof2():
quitterMDPprof()
global prof2
prof2 = tk.Tk()
prof2.title("Espace professeurs")
prof2.config(bg='#A26F65')
prof2.geometry('1650x1050')
global gifdict
gifdict={}

entete = tk.Label(prof2, text='Bienvenue à toi jeune prof', font = ('Tw Cen MT', 25))
entete.place(x=650, y=200, anchor='w')

global exoaenvoyer

entete = tk.Label(prof2, text='Envoyer une image', font = ('Tw Cen MT', 15))
entete.place(x=250, y=300, anchor='w')

entete = tk.Label(prof2, text='Envoyer un texte', font = ('Tw Cen MT', 15))
entete.place(x=1250, y=300, anchor='w')

Bouton = tk.Button(prof2, text ="Quitter",command = quitterProf, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
Bouton.place(x=1500, y=900, anchor='w')

Bouton = tk.Button(prof2, text ="Ouvrir une Image",command = OuvrirImage, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white")
Bouton.place(x=250, y=500, anchor='w')

exoaenvoyer = tk.StringVar()

Champ = tk.Entry(prof2, textvariable= exoaenvoyer, bg ='bisque', fg='black')
Champ.focus_set()
Champ.place(x=1170, y=400, anchor='w', width = 300)

Bouton = tk.Button(prof2, text ="Envoyer",command = envoyertext, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#644C47", fg ="white")
Bouton.place(x=1280, y=500, anchor='w')

prof2.mainloop()


def eleve2():


quitterMDPeleve()
global eleve2
eleve2 = tk.Tk()
eleve2.title("Espace élèves")
eleve2.config(bg='#A26F65')
eleve2.geometry('1650x1050')

global log

log = tk.Text(eleve2, width=25, height=20, takefocus=0, font = ('Tw Cen MT', 15))
log.place(x=400, y=310, anchor='w')

global socket

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(('172.18.189.128', 15555))

chrono = time.time()

global client,adress

while True:
socket.listen(5)
client, address = socket.accept()
print ("{} connected".format( address ))
response = client.recv(255)
if response != "":
response2 = response.decode('utf-8')
log.insert(END, response2)


client.close()
socket.close()



eleve2.mainloop()











def OuvrirImage():

filename = tk.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('gif files','.gif'),('all files','.*')])
print(filename)

photo = PhotoImage(file=filename)
gifdict[filename] = photo # référence
print(gifdict)





def envoyertext():
exot = exoaenvoyer.get()
hote = "172.18.189.97"
port = 15555

global socket

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((hote,port))
print ("Connecté au prof")

exot2 = bytes(exot, encoding='utf-8')
socket.send(exot2)

print("Envoyé")
socket.close()





def verifsock():
global socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(('192.168.43.125', 15555))

socket.listen(5)
client, address = socket.accept()
print ("{} connected".format( address ))

response = client.recv(255)
if response != "":
log.insert(END, response)
else:
return


after_id = eleve2.after(10, verifsock)






def quitterAccueil():
root.destroy()

def quitterProf():
prof2.destroy()

def quitterMDPprof():
prof1.destroy()

def quitterMDPeleve():
eleve1.destroy()

def RetourAccueilEl():
eleve1.destroy()
Accueil()

def RetourAccueilPr():
prof1.destroy()
Accueil()

Accueil()



3 réponses

quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 346
3 mars 2020 à 17:11
Bonjour,
Lorsque vous postez du code, faites le avec les indentations, surtout pour du python. Il faut séléctionner le langage python dans la liste déroulante quand vous ajoutez la balise de code.

Sinon pour votre problème vous pouvez utiliser le module select comme dans l'exemple ici : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/234698-gerez-les-reseaux
Ou vous pouvez aussi utiliser un thread différent pour attendre les nouvelles connexions avec le module threading.
0
Bonjour,
Excusez moi pur l'indentation je n'ai pas fait attention :/

Sinon le module select à l'air de pouvoir faire l'affaire mais je ne sais pas comment l'implémenter à mon code... Pouvez vous me donner des pistes ?

Merci beaucoup


Voici mon code (indenté):


import tkinter as tk
from tkinter.filedialog import *
from tkinter.messagebox import *
import socket
 
import time
 
 
global socket
global client
global log
 
 
 
 
def Accueil():
    global root
    root = tk.Tk()
 
    root.title("Espace élèves")
    root.config(bg='#A26F65')
    root.geometry('1650x1050')
 
    entete = tk.Label(root, text='Bienvenue sur votre espace pedagogique !', font = ('Tw Cen MT', 30))
    entete.place(x=490, y=200, anchor='w')
 
    Bouton = tk.Button(root, text ="Espace élèves",command = eleve, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=500, y=400, anchor='w')
 
    Bouton = tk.Button(root, text ="Espace professeur",command = prof, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=1000, y=400, anchor='w')
 
    Bouton = tk.Button(root, text ='Quitter',command = quitterAccueil, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='se' )
 
 
    root.mainloop()
 
 
 
 
 
def prof():
    quitterAccueil()
    global prof1
    prof1 = tk.Tk()
    prof1.title("Espace professeurs")
    prof1.config(bg='#A26F65')
    prof1.geometry('1650x1050')
 
    global Motdepasseprof
    Motdepasseprof = tk.StringVar()
    Champ = tk.Entry(prof1, textvariable= Motdepasseprof, show='*', bg ='bisque', fg='black')
    Champ.focus_set()
    Champ.place(x=780, y=300, anchor='w')
 
    Bouton = tk.Button(prof1, text ="Quitter",command = quitterMDPprof, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='w')
 
 
    Bouton = tk.Button(prof1, text ="Valider",command = VerificationProf, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=805, y=400, anchor='w')
 
    entete = tk.Label(prof1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20))
    entete.place(x=700, y=200, anchor='w')
 
    Bouton = tk.Button(prof1, text ="Retour",command = RetourAccueilPr, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1400, y=900, anchor='w')
 
    prof1.mainloop()
 
 
 
 
 
def eleve():
    quitterAccueil()
    global eleve1
    eleve1 = tk.Tk()
    eleve1.title("Espace élèves")
    eleve1.config(bg='#A26F65')
    eleve1.geometry('1650x1050')
 
    global Motdepasseeleve
    Motdepasseeleve= tk.StringVar()
    Champ = tk.Entry(eleve1, textvariable= Motdepasseeleve, show='*', bg ='bisque', fg='black')
    Champ.focus_set()
    Champ.place(x=780, y=300, anchor='w')
 
    Bouton = tk.Button(eleve1, text ="Valider",command = VerificationEleve, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=805, y=400, anchor='w')
 
    Bouton = tk.Button(eleve1, text ="Quitter",command = quitterMDPeleve, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='w')
 
    Bouton = tk.Button(eleve1, text ="Retour",command = RetourAccueilEl, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1400, y=900, anchor='w')
 
    entete = tk.Label(eleve1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20))
    entete.place(x=700, y=200, anchor='w')
 
    eleve1.mainloop()
 
 
 
 
 
def VerificationEleve():
    if Motdepasseeleve.get() == 'eleve':
        showinfo('Résultat','Mot de passe correct')
        eleve2()
 
    else:
        showwarning('Résultat','Mot de passe incorrect')
        Motdepasseeleve.set('')
 
 
 
 
 
 
def VerificationProf():
    if Motdepasseprof.get() == 'prof':
        showinfo('Résultat','Mot de passe correct!')
        prof2()
 
    else:
        showwarning('Résultat','Mot de passe incorrect!')
        Motdepasseprof.set('')
 
 
 
 
def prof2():
    quitterMDPprof()
    global prof2
    prof2 = tk.Tk()
    prof2.title("Espace professeurs")
    prof2.config(bg='#A26F65')
    prof2.geometry('1650x1050')
    global  gifdict
    gifdict={}
 
    entete = tk.Label(prof2, text='Bienvenue à toi jeune prof', font = ('Tw Cen MT', 25))
    entete.place(x=650, y=200, anchor='w')
 
    global exoaenvoyer
 
    entete = tk.Label(prof2, text='Envoyer une image', font = ('Tw Cen MT', 15))
    entete.place(x=250, y=300, anchor='w')
 
    entete = tk.Label(prof2, text='Envoyer un texte', font = ('Tw Cen MT', 15))
    entete.place(x=1250, y=300, anchor='w')
 
    Bouton = tk.Button(prof2, text ="Quitter",command = quitterProf, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='w')
 
    Bouton = tk.Button(prof2, text ="Ouvrir une Image",command = OuvrirImage, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=250, y=500, anchor='w')
 
    exoaenvoyer = tk.StringVar()
 
    Champ = tk.Entry(prof2, textvariable= exoaenvoyer, bg ='bisque', fg='black')
    Champ.focus_set()
    Champ.place(x=1170, y=400, anchor='w', width = 300)
 
    Bouton = tk.Button(prof2, text ="Envoyer",command = envoyertext, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=1280, y=500, anchor='w')
 
    prof2.mainloop()
 
 
def eleve2():
 
 
    quitterMDPeleve()
    global eleve2
    eleve2 = tk.Tk()
    eleve2.title("Espace élèves")
    eleve2.config(bg='#A26F65')
    eleve2.geometry('1650x1050')
 
    global log
 
    log = tk.Text(eleve2, width=25, height=20, takefocus=0, font = ('Tw Cen MT', 15))
    log.place(x=400, y=310, anchor='w')
 
    global socket
 
    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.bind(('172.18.189.128', 15555))
 
    chrono = time.time()
 
    global client,adress
 
    while True:
        socket.listen(5)
        client, address = socket.accept()
        print ("{} connected".format( address ))
        response = client.recv(255)
        if response != "":
            response2 = response.decode('utf-8')
            log.insert(END, response2)
 
 
    client.close()
    socket.close()
 
 
 
    eleve2.mainloop()
 
 
 
 
 
 
 
 
 
 
 
def OuvrirImage():
 
    filename = tk.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('gif files','.gif'),('all files','.*')])
    print(filename)
 
    photo = PhotoImage(file=filename)
    gifdict[filename] = photo  # référence
    print(gifdict)
 
 
 
 
 
def envoyertext():
    exot = exoaenvoyer.get()
    hote = "172.18.189.97"
    port = 15555
 
    global socket
 
    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.connect((hote,port))
    print ("Connecté au prof")
 
    exot2 = bytes(exot, encoding='utf-8')
    socket.send(exot2)
 
    print("Envoyé")
    socket.close()
 
 
 
 
 
def verifsock():
    global socket
    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.bind(('192.168.43.125', 15555))
 
    socket.listen(5)
    client, address = socket.accept()
    print ("{} connected".format( address ))
 
    response = client.recv(255)
    if response != "":
        log.insert(END, response)
    else:
        return
 
 
    after_id = eleve2.after(10, verifsock)
 
 
 
 
 
 
def quitterAccueil():
    root.destroy()
 
def quitterProf():
    prof2.destroy()
 
def quitterMDPprof():
    prof1.destroy()
 
def quitterMDPeleve():
    eleve1.destroy()
 
def RetourAccueilEl():
    eleve1.destroy()
    Accueil()
 
def RetourAccueilPr():
    prof1.destroy()
    Accueil()
 
Accueil()
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 346
3 mars 2020 à 22:19
Bonjour,
Je suis désolé, je vais revenir sur mon message précédent.

Le module select permet au serveur d'accepter plusieurs clients simultanément, si ce n'est pas prévu dans votre programme le module select n'est peut-être pas nécessaire.
Vous pouvez rendre les sockets non bloquants avec
socket.setblocking(False)
.
Vous pouvez ensuite utiliser la méthode after de tkinter pour appeler une fonction toutes les 100ms par exemple et à chaque fois vous testez si un nouveau client s'est connecté ou si un nouveau message est arrivé.

Si il peut y avoir plusieurs clients en même temps, vous pouvez faire la même chose mais en utilisant le module select pour vérifier si de nouveaux clients ou de nouveaux messages sont arrivés.

J'éspère que mon explication n'est pas trop confuse.
0
Merci pour votre réponse.
J'ai utilisé le threading et cela marche très bien
Seulement, j'ai maintenant un problème car une fois que j'ai envoyé une donnée, celles que j'envoie après ne sont pas reçues
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 346 > Arm
5 mars 2020 à 16:17
Pourquoi pensez-vous que les données envoyées ne sont pas reçues ?
Pouvez-vous poster le code que vous avez fait ?
0
Finalement, j'ai trouvé le problème: j'avais oublié un while True dans le thread pour qu'il se répète, ce qui faisait qu'une fois le thread démarré il ne s'éxecutait qu'une fois...

Toute cette partie liée à Socket est donc résolue (j'ai cepndant des problèmes avec le module csv maintenant...)

Voici mon code pour ceux que cela interesse:

import tkinter as tk
from tkinter.filedialog import *
from tkinter.messagebox import *
import socket
import csv
import time
import threading

global socket
global client
global log
global fichiercsv

fichiercsv = 'LST.csv'






def Accueil():

    global root
    root = tk.Tk()

    root.title("Espace élèves")
    root.config(bg='#A26F65')
    root.geometry('1650x1050')

    entete = tk.Label(root, text='Bienvenue sur votre espace pedagogique !', font = ('Tw Cen MT', 30))
    entete.place(x=490, y=200, anchor='w')

    Bouton = tk.Button(root, text ="Espace élèves",command = eleve, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=500, y=400, anchor='w')

    Bouton = tk.Button(root, text ="Espace professeur",command = prof, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=1000, y=400, anchor='w')

    Bouton = tk.Button(root, text ="Enregistrer un nouvel identifiant",command = regisID, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=680, y=450, anchor='w')

    Bouton = tk.Button(root, text ='Quitter',command = quitterAccueil, font = ('Tw Cen MT', 15), overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='se' )


    root.mainloop()










def adminCheck():
    global adminCheck
    adminCheck = tk.Tk()
    adminCheck.title("Saisir les identifiants admin")
    adminCheck.config(bg='#ff5050')
    adminCheck.geometry('400x400')

    entete = tk.Label(adminCheck, text='Saisissez vos identifiants\nadmin', font = ('Tw Cen MT', 18))
    entete.place(x=95, y=80, anchor='w')

    global IDadmin
    IDadmin = tk.StringVar()
    Champ = tk.Entry(adminCheck, textvariable= IDadmin,  bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=145, y=140, anchor='w')


    global MDPadmin
    MDPadmin = tk.StringVar()
    Champ = tk.Entry(adminCheck, textvariable= MDPadmin,show= '*', bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=145, y=180, anchor='w')


    Bouton = tk.Button(adminCheck, text ="Valider",command = adminverif, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=170, y=260, anchor='w')

    Bouton = tk.Button(adminCheck, text ="Quitter",command = quitterAdm, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=172, y=330, anchor='w')

    adminCheck.mainloop()










def adminverif():

    global IDadmin2
    global MDPadmin2

    IDadmin2 = IDadmin.get()
    MDPadmin2 = MDPadmin.get()


    fichiercsv2 = open(fichiercsv, 'r',encoding='utf 8')
    csvRead = csv.reader(fichiercsv2, delimiter=',')
    for row in csvRead :
        if row :
            if row[0] == "admin" :
                if row[1] == MDPadmin2 :
                    showinfo("Validation","Identifiants corrects!")
                    regisID()


                else:
                    showwarning('Erreur','Mot de passe incorrect !')
                    MDPadmin.set('')

            else:
                showwarning('Erreur','Identifiant inconnu !')
                MDPadmin.set('')
                IDadmin.set('')









def regisID():

    global regisIDD

    regisIDD = tk.Tk()
    regisIDD.title("Enregistrer un nouvel identifiant")
    regisIDD.config(bg='#ff5050')
    regisIDD.geometry('400x400')

    entete = tk.Label(regisIDD, text='Saisissez vos identifiants', font = ('Tw Cen MT', 18))
    entete.place(x=95, y=80, anchor='w')

    global IDareg
    IDareg = tk.StringVar()
    Champ = tk.Entry(regisIDD, textvariable= IDareg,  bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=145, y=140, anchor='w')

    global MDPareg
    MDPareg = tk.StringVar()
    Champ = tk.Entry(regisIDD, textvariable= MDPareg, bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=145, y=180, anchor='w')

    Bouton = tk.Button(regisIDD, text ="Valider",command = regcl, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=170, y=260, anchor='w')

    Bouton = tk.Button(regisIDD, text ="Quitter",command = quitterReg, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=172, y=330, anchor='w')

    regisIDD.bind('<Return>', regcl2)

    regisIDD.mainloop()







def regcl():

    global newuser
    global newpss

    newuser = IDareg.get()
    newpss = MDPareg.get()


    print(newuser)
    print(newpss)


    fichiercsv2 = open(fichiercsv, 'a',encoding='utf-8', newline ='')
    cswri = csv.writer(fichiercsv2)
    cswri.writerow((newuser,newpss))

    fichiercsv2.close()


    showinfo("Validation","Identifiants enregistrés")
    regisIDD.destroy()







def regcl2(event):
    regcl()







def prof():
    quitterAccueil()
    global prof1
    prof1 = tk.Tk()
    prof1.title("Espace professeurs")
    prof1.config(bg='#A26F65')
    prof1.geometry('1650x1050')

    prof1.bind('<Return>', VerifElPr)

    global usernamePr
    usernamePr= tk.StringVar()
    Champ = tk.Entry(prof1, textvariable= usernamePr,  bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=780, y=300, anchor='w')

    global Motdepasseprof
    Motdepasseprof = tk.StringVar()
    Champ = tk.Entry(prof1, textvariable= Motdepasseprof, show='*', bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=780, y=330, anchor='w')

    Bouton = tk.Button(prof1, text ="Quitter",command = quitterMDPprof, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='w')


    Bouton = tk.Button(prof1, text ="Valider",command = VerificationProf, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=805, y=400, anchor='w')

    entete = tk.Label(prof1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20))
    entete.place(x=700, y=200, anchor='w')

    Bouton = tk.Button(prof1, text ="Retour",command = RetourAccueilPr, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1400, y=900, anchor='w')

    prof1.mainloop()





def eleve():
    quitterAccueil()
    global eleve1
    eleve1 = tk.Tk()
    eleve1.title("Espace élèves")
    eleve1.config(bg='#A26F65')
    eleve1.geometry('1650x1050')

    eleve1.bind('<Return>', VerifElMo)

    global usernameEl

    usernameEl= tk.StringVar()
    Champ = tk.Entry(eleve1, textvariable= usernameEl,  bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=780, y=300, anchor='w')

    global Motdepasseeleve

    Motdepasseeleve= tk.StringVar()
    Champ = tk.Entry(eleve1, textvariable= Motdepasseeleve, show='*', bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=780, y=330, anchor='w')


    Bouton = tk.Button(eleve1, text ="Valider",command = VerificationEleve, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=805, y=400, anchor='w')

    Bouton = tk.Button(eleve1, text ="Quitter",command = quitterMDPeleve, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='w')

    Bouton = tk.Button(eleve1, text ="Retour",command = RetourAccueilEl, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1400, y=900, anchor='w')

    entete = tk.Label(eleve1, text='Saisir votre mot de passe', font = ('Tw Cen MT', 20))
    entete.place(x=700, y=200, anchor='w')

    eleve1.mainloop()




def VerifElMo(event):
    VerificationEleve()


def VerificationEleve():
    global motdepasseEl
    global usernameEl2

    motdepasseEl = Motdepasseeleve.get()
    usernameEl2 = usernameEl.get()


    fichiercsv2 = open(fichiercsv, 'r',encoding='utf 8')
    csvRead = csv.reader(fichiercsv2, delimiter=',')
    for row in csvRead :
        if row :
            if row[0] == usernameEl2 :
                if row[1] == motdepasseEl :
                    showinfo("Validation","Identifiants corrects!")
                    eleve2()


                else:
                    showwarning('Erreur','Mot de passe incorrect !')
                    Motdepasseeleve.set('')

            else:
                showwarning('Erreur','Identifiant inconnu !')
                Motdepasseeleve.set('')
                usernameEl.set('')


def VerifElPr(event):
    VerificationProf()


def VerificationProf():
    global motdepassePr
    global usernamePr2


    motdepassePr = Motdepasseprof.get()
    usernamePr2 = usernamePr.get()

    fichiercsv2 = open(fichiercsv, 'r',encoding='utf 8')
    readCsv = csv.reader(fichiercsv2, delimiter=',')
    for row in readCsv:
        if row :
            if row[0] == usernamePr2 :
                if row[1] == motdepassePr :
                    showinfo("Validation","Identifiants corrects!")
                    prof2()


                else:
                    showwarning('Erreur','Mot de passe incorrect !')
                    Motdepasseprof.set('')
            else:
                showwarning('Erreur','Identifiant inconnu !')
                Motdepasseprof.set('')
                usernamePr.set('')





def prof2():
    quitterMDPprof()
    global prof2
    prof2 = tk.Tk()
    prof2.title("Espace professeurs")
    prof2.config(bg='#A26F65')
    prof2.geometry('1650x1050')
    global  gifdict
    gifdict={}

    entete = tk.Label(prof2, text='Bienvenue à toi jeune prof', font = ('Tw Cen MT', 25))
    entete.place(x=650, y=200, anchor='w')

    global exoaenvoyer

    entete = tk.Label(prof2, text='Envoyer une image', font = ('Tw Cen MT', 15))
    entete.place(x=250, y=300, anchor='w')

    entete = tk.Label(prof2, text='Envoyer un texte', font = ('Tw Cen MT', 15))
    entete.place(x=1250, y=300, anchor='w')

    Bouton = tk.Button(prof2, text ="Quitter",command = quitterProf, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=900, anchor='w')

    Bouton = tk.Button(prof2, text ="Ouvrir une Image",command = OuvrirImage, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=250, y=500, anchor='w')

    exoaenvoyer = tk.StringVar()

    Champ = tk.Entry(prof2, textvariable= exoaenvoyer, bg ='bisque', fg='black', justify='center')
    Champ.focus_set()
    Champ.place(x=1170, y=400, anchor='w', width = 300)

    Bouton = tk.Button(prof2, text ="Envoyer",command = envoyertext, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#644C47", fg ="white")
    Bouton.place(x=1280, y=500, anchor='w')

    prof2.mainloop()


def eleve2():


    quitterMDPeleve()
    global eleve2
    eleve2 = tk.Tk()
    eleve2.title("Espace élèves")
    eleve2.config(bg='#A26F65')
    eleve2.geometry('1650x1050')

    global logRec

    Consigne = tk.StringVar()

    logRec = tk.Text(eleve2, width=120, height=15, takefocus=0, font = ('Tw Cen MT', 15))
    logRec.place(x=230, y=200, anchor='w')

    env = tk.Label(eleve2, text='Consignes\nenvoyées', font = ('Tw Cen MT', 15), justify = 'center')
    env.place(x=70, y=80, anchor='w')

    logRep = tk.Text(eleve2, width=120, height=15, takefocus=0, font = ('Tw Cen MT', 15))
    logRep.place(x=230, y=700, anchor='w')

    rep = tk.Label(eleve2, text='Réponses', font = ('Tw Cen MT', 15))
    rep.place(x=70, y=590, anchor='w')

    Bouton = tk.Button(eleve2, text ="Copier la consigne",command = copyCons, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=800, y=410, anchor='w')

    Bouton = tk.Button(eleve2, text ="Envoyer la réponse",command = sendRep, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=800, y=910, anchor='w')

    Bouton = tk.Button(eleve2, text ="Quitter",command = quitterEleve2, font = ('Tw Cen MT', 15),  overrelief= 'ridge', bg= "#6D2414", fg ="white")
    Bouton.place(x=1500, y=920, anchor='w')

    global threadEl

    threadEl = threading.Thread(target=verifsock)
    threadEl.daemon = True # without the daemon parameter, the function in parallel will continue even your main program ends
    threadEl.start()

    eleve2.mainloop()





def verifsock():
    global socket2
    socket2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    hostname = socket.gethostbyname(socket.gethostname())
    socket2.bind((hostname, 15555))
    while True:

        socket2.listen(5)
        client, address = socket2.accept()
        print ("{} connected".format( address ))

        response = client.recv(255)
        response2 = response.decode("utf-8")
        if response2 != "":
            logRec.insert(END, str(response2)+"\n")
        else:
            return



def copyCons():
    print("Aha")

def sendRep():
    print("Wsh")


def OuvrirImage():

    filename = tk.filedialog.askopenfilename(title="Ouvrir une image",filetypes=[('gif files','.gif'),('all files','.*')])
    print(filename)

    photo = PhotoImage(file=filename)
    gifdict[filename] = photo  # référence
    print(gifdict)





def envoyertext():
    exot = exoaenvoyer.get()
    hote = "172.16.2.220"
    port = 15555

    global socket

    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.connect((hote,port))
    print ("Connecté aux élèves")

    exot2 = bytes(exot, encoding='utf-8')
    socket.send(exot2)

    print("Envoyé")
    socket.close()






def quitterAdm():
    adminCheck.destroy()


def quitterReg():
    regisIDD.destroy()


def quitterEleve2():
    eleve2.destroy()

def quitterAccueil():
    root.destroy()

def quitterProf():
    prof2.destroy()

def quitterMDPprof():
    prof1.destroy()

def quitterMDPeleve():
    eleve1.destroy()

def RetourAccueilEl():
    eleve1.destroy()
    Accueil()

def RetourAccueilPr():
    prof1.destroy()
    Accueil()

Accueil()






Merci pour votre aide ;)
0