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

Python Discussion :

Gros probl�me Tkinter


Sujet :

Python

  1. #1
    Membre r�gulier Avatar de MinyMiny
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par d�faut Gros probl�me Tkinter
    Bonjour, des amis et moi nous sommes lanc�s dans la r�alisation d'un Puissance 4 cependant nous avons un probl�me pour mettre en place l'interface graphique. La grille du P4 s'affiche correctement cependant il ne se passe rien quand on clique sur une case. Alors je voudrais bien savoir d'o� vient ce probl�me et comment y rem�dier sachant que notre niveau de programmation est d�butant. J'ai r�duit le programme pour que deux joueurs puissent jouer :

    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
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    from tkinter import*
    fenetre = Tk()
    import random
     
    #######FONCTIONS###########
     
    def choix_adv ():
        """permet de choisir contre qui le joueur veut jouer ainsi que les niveaux de difficulté (contre l'ordinateur)"""
        adv=int(input("Contre qui souhaitez-vous jouer : l'ordinateur ? (tapez 1) un autre joueur ? (tapez 2) "))
        if adv != 1 and adv != 2 :
            print("Veuillez choisir un nombre entre 1 et 2 !")
            choix_adv()
     
     
     
        if adv==2:
            joueur()
     
     
    def joueur() :
        """tant que la partie n'est pas gagnée, permet de changer de joueur"""
        p = 1
        gagne = False
        while not(gagne):
            jouer(p)
            gagne = verif (p)
            p = 3 - p
     
     
    def jouer(p):
        global j,i
        """demande au joueur de jouer dans quelle colonne il veut jouer + si coup impossible, fait rejouer le joueur"""
        print ("C'est au joueur",p,"de jouer :")
        j = int(input("Joueur "+str(p)+", dans quelle colonne voulez-vous jouer ? "))
     
        if j>6 or j<0 :
            print ("Impossible, veuillez choisir une colonne entre 0 et 6 !")
            return jouer(p)
        if grille[0][j]!= 0:
                print ("Impossible, veuillez jouer dans une autre colonne !")
                return jouer(p)
     
        i=0
        while i<6 and grille[i][j] == 0:
            i = i+1
        grille[i-1][j] = p
        return afficher_grille()
     
     
    def afficher_grille():
        """afficher la grille"""
        for ligne in grille:
            print(ligne)
     
    grille = [[0 for j in range(7)] for i in range(6)]
     
     
    def verif_hori (p):
        """Vérifie si il y a 4 pièces alignés horizontalement"""
        for i in range (6):
            for j in range (4):
                if grille[i][j]==grille[i][j+1]==grille[i][j+2]==grille[i][j+3]==p:
                    return True
        return False
     
     
    def verif_verti(p):
        """Vérifie si il y a 4 pièces alignés verticalement"""
        for i in range (3):
            for j in range (7):
                if grille[i][j]==p and grille[i+1][j]==p and grille[i+2][j]==p and grille[i+3][j]==p:
                    return True
     
        return False
     
     
     
    def verif_diago (p):
        """Vérifie si il y a 4 pièces alignés diagonalement"""
        for i in range (3):
            for j in range (4):
                if grille[i][j]==grille[i+1][j+1]==grille[i+2][j+2]==grille[i+3][j+3]==p:
                    return True
        for i in range (3):
            for j in range (3,7):
                if grille[i][j]==grille[i+1][j-1]==grille[i+2][j-2]==grille[i+3][j-3]==p:
                    return True
        return False
     
     
     
     
     
    def verif (p):
        """Si une vérif est OK alors on affiche le joueur qui a gagné"""
        gagne = False
     
        if verif_hori(p)== True :
            print("Le joueur", p,"a gagné !")
            gagne = True
     
     
        elif verif_verti(p)== True :
            print("Le joueur", p,"a gagné !")
            gagne = True
     
     
        elif verif_diago(p)== True :
            print("Le joueur", p,"a gagné !")
            gagne = True
     
        return gagne
     
     
     
    #creation du canevas :
    canevas=Canvas(fenetre)
    canevas.configure(width=700,height=600,bg='#0048B5')
    canevas.grid(row = 1,column = 1,padx = 20,pady = 20)
    #cercle
     
    for j in range(7):
        for i in range(6):
            canevas.create_oval(100*j+50-45,100*i+50-45,100*j+50+45,100*i+50+45,width=5,fill='white',outline='#018CD2')
     
    def case (x):
        if 0<=x<=100:
            return 0
        if 100<=x<=200:
            return 1
        if 200<=x<=300:
            return 2
        if 300<=x<=400:
            return 3
        if 400<=x<=500:
            return 4
        if 500<=x<=600:
            return 5
        if 600<=x<=700:
            return 6
     
    p = 1
     
     
    def clic(event):
        global joueur,canevas,j,p
        i = event.x
        j = case(x)
        jouer(p)
        p=3-p
     
     
        if p==1:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='yellow',outline='#018CD2')
        else:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='red',outline='#018CD2')
     
     
     
     
    fenetre.mainloop()
    #-------------------CORPS DU PROGRAMME----------------------
     
    choix_adv()
    (en fermant la grille du p4, vous pouvez jouer sur le shell)
    Merci d'avance !

  2. #2
    Membre �m�rite
    Homme Profil pro
    Aucune activit�
    Inscrit en
    Novembre 2011
    Messages
    505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Aucune activit�

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par d�faut
    Citation Envoy� par MinyMiny Voir le message
    La grille du P4 s'affiche correctement cependant il ne se passe rien quand on clique sur une case.
    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
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    from tkinter import*
    fenetre = Tk()
    import random
     
    #######FONCTIONS###########
     
    def choix_adv ():
        """permet de choisir contre qui le joueur veut jouer ainsi que les niveaux de difficulté (contre l'ordinateur)"""
        adv=int(input("Contre qui souhaitez-vous jouer : l'ordinateur ? (tapez 1) un autre joueur ? (tapez 2) "))
        if adv != 1 and adv != 2 :
            print("Veuillez choisir un nombre entre 1 et 2 !")
            choix_adv()
     
     
     
        if adv==2:
            joueur()
     
     
    def joueur() :
        """tant que la partie n'est pas gagnée, permet de changer de joueur"""
        p = 1
        gagne = False
        while not(gagne):
            jouer(p)
            gagne = verif (p)
            p = 3 - p
     
     
    def jouer(p):
        global j,i
        """demande au joueur de jouer dans quelle colonne il veut jouer + si coup impossible, fait rejouer le joueur"""
        print ("C'est au joueur",p,"de jouer :")
        j = int(input("Joueur "+str(p)+", dans quelle colonne voulez-vous jouer ? "))
     
        if j>6 or j<0 :
            print ("Impossible, veuillez choisir une colonne entre 0 et 6 !")
            return jouer(p)
        if grille[0][j]!= 0:
                print ("Impossible, veuillez jouer dans une autre colonne !")
                return jouer(p)
     
        i=0
        while i<6 and grille[i][j] == 0:
            i = i+1
        grille[i-1][j] = p
        return afficher_grille()
     
     
    def afficher_grille():
        """afficher la grille"""
        for ligne in grille:
            print(ligne)
     
    grille = [[0 for j in range(7)] for i in range(6)]
     
     
    def verif_hori (p):
        """Vérifie si il y a 4 pièces alignés horizontalement"""
        for i in range (6):
            for j in range (4):
                if grille[i][j]==grille[i][j+1]==grille[i][j+2]==grille[i][j+3]==p:
                    return True
        return False
     
     
    def verif_verti(p):
        """Vérifie si il y a 4 pièces alignés verticalement"""
        for i in range (3):
            for j in range (7):
                if grille[i][j]==p and grille[i+1][j]==p and grille[i+2][j]==p and grille[i+3][j]==p:
                    return True
     
        return False
     
     
     
    def verif_diago (p):
        """Vérifie si il y a 4 pièces alignés diagonalement"""
        for i in range (3):
            for j in range (4):
                if grille[i][j]==grille[i+1][j+1]==grille[i+2][j+2]==grille[i+3][j+3]==p:
                    return True
        for i in range (3):
            for j in range (3,7):
                if grille[i][j]==grille[i+1][j-1]==grille[i+2][j-2]==grille[i+3][j-3]==p:
                    return True
        return False
     
     
     
     
     
    def verif (p):
        """Si une vérif est OK alors on affiche le joueur qui a gagné"""
        gagne = False
     
        if verif_hori(p)== True :
            print("Le joueur", p,"a gagné !")
            gagne = True
     
     
        elif verif_verti(p)== True :
            print("Le joueur", p,"a gagné !")
            gagne = True
     
     
        elif verif_diago(p)== True :
            print("Le joueur", p,"a gagné !")
            gagne = True
     
        return gagne
     
     
     
    #creation du canevas :
    canevas=Canvas(fenetre)
    canevas.configure(width=700,height=600,bg='#0048B5')
    canevas.grid(row = 1,column = 1,padx = 20,pady = 20)
    #cercle
     
    for j in range(7):
        for i in range(6):
            canevas.create_oval(100*j+50-45,100*i+50-45,100*j+50+45,100*i+50+45,width=5,fill='white',outline='#018CD2')
     
    def case (x):
        if 0<=x<=100:
            return 0
        if 100<=x<=200:
            return 1
        if 200<=x<=300:
            return 2
        if 300<=x<=400:
            return 3
        if 400<=x<=500:
            return 4
        if 500<=x<=600:
            return 5
        if 600<=x<=700:
            return 6
     
    p = 1
     
     
    def clic(event):
        global joueur,canevas,j,p
        i = event.x
        j = case(x)
        jouer(p)
        p=3-p
     
     
        if p==1:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='yellow',outline='#018CD2')
        else:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='red',outline='#018CD2')
     
     
     
     
    fenetre.mainloop()
    #-------------------CORPS DU PROGRAMME----------------------
     
    choix_adv()
    Bonjour,
    De quel endroit est lanc�e la fonction "clic" ?
    G�n�ralement, la m�thode "mainloop" est appel�e � la fin du script.

    Il semble que le fonctionnement d'interface graphique (dirig�e par les �v�nements) ne soit pas saisie.
    Le livre (possiblement gratuit et disponible sur developpez) de G.Swinnen serait bien utile.

    En rapide:
    -> mettre en place l'interface graphique
    -> en r�ponse aux �v�nements d�clench�s par l'interface graphique d�finir des fonctions qui "r�pondent" aux �v�nements.
    -> entrer dans la boucle g�n�rale de l'interface graphique (qui boucle tant qu'aucun �v�nement n'est d�tect�). Ces �v�nements d�tect�s sont, bien entendus, d�finis par l'utilisateur (le nombre d'�v�nement possible est tr�s important), et sont li�s � des fonctions (ie: point pr�c�dent).

    Clodion

  3. #3
    Membre r�gulier Avatar de MinyMiny
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par d�faut
    Merci de ta r�ponse Clodion
    Le "mainloop" est justement � la fin, c'est bien l� qu'il doit �tre, non ?
    Et je ne sais o� et comment placer la fonction "clic", peut-tu m'�clairer ?
    Encore merci

  4. #4
    Membre �m�rite
    Homme Profil pro
    Aucune activit�
    Inscrit en
    Novembre 2011
    Messages
    505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Aucune activit�

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par d�faut
    Citation Envoy� par MinyMiny Voir le message
    Le "mainloop" est justement � la fin, c'est bien l� qu'il doit �tre, non ?
    Et je ne sais o� et comment placer la fonction "clic", peut-tu m'�clairer ?
    Bonjour,
    Non, le "mainloop()" se trouve en avant derni�re position. L'appel de la fonction "choix_adv()" ne s�ex�cute qu'une fois sorti de la boucle graphique (de la boucle "tkinter").
    Ainsi que je le sugg�rais, il serait instructif (quelques dizaines de minutes au maximum) de lire attentivement le livre de G.Swinnen, surtout le chapitre 10.

    Pour un exemple:
    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
    import tkinter as tk
     
    # les fonctions executees apres action de l'utilisateur
    def coucou():
        """Affiche "coucou" ou "------" apres clic gauche sur le bouton"""
        if lab[0].cget("text") != "coucou":
            lab[0].config(text = "coucou")
        else:
            lab[0].config(text = "------")
     
    def affiche(event):
        """affiche les coordonnees de la souris sur le bouton après clic droit"""
        lab[1].config(text = event.x)
        lab[2].config(text = event.y)
     
    # Creation de l'interface graphique
    fen = tk.Tk()
     
    # fonction pour l'interface graphique
    def mes_labels(n = 3):
        lst = [] * 3
        for x in range(n):
            lst.append(tk.Label(fen, text = ""))
            lst[x].pack()
        return lst
     
    # appel de la fonction de l'interface graphique
    lab = mes_labels(3)
     
    # suite de la creation de l'interface graphique
    # avec appel d'une fonction en réponse d'une action de l'utilisateur
    bt = tk.Button(fen, text = "affiche 'coucou' pour un clic gauche", command=coucou)
    bt.pack()
    # avec appel d'une fonction en réponse d'une action de l'utilisateur: fin de la fenetre
    btq = tk.Button(fen, text = "quit", command = fen.destroy)
    btq.pack()
     
    # lien entre un clic et une fonction (deuxième forme d'interaction avec l'utilisateur)
    # affiche la position du clic sur la fenetre
    fen.bind("<Button-3>", affiche)
     
    # fenetre qui demarre la boucle necessaire au fonctionnement de l'interface
    fen.mainloop()
    Normalement le principal est dans ce script.

    Clodion

    PS: pour plus de d�tails sur tkinter: ici

  5. #5
    Membre r�gulier Avatar de MinyMiny
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par d�faut
    J'ai lu un peu lu le livre que vous m'avez conseiller regarder votre algorithme mais j'ai du mal � faire le lien avec mon programme. J'ai compris comment faire le lien entre un clic et une fonction mais j'ai toujours du mal � comprendre comment r�cup�rer les donn�es de ce clic et placer des ronds de couleurs dans les cases voulues.
    Voil� ce que j'ai chang� et j'ai toujours des erreurs :
    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
    def clic(event):
        global joueur,canevas,j,p
        i = event.x
        j = case(x)
        jouer(p)
        p=3-p
     
     
        if p==1:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='yellow',outline='#018CD2')
        else:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='red',outline='#018CD2')
     
     
    canevas.bind('<ButtonPress-1>',clic)
     
     
    #-------------------CORPS DU PROGRAMME----------------------
     
    choix_adv()
     
    fenetre.mainloop()
    Que faire ? Merci

  6. #6
    Membre tr�s actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par d�faut
    Citation Envoy� par MinyMiny Voir le message
    ... mais j'ai toujours du mal � comprendre comment r�cup�rer les donn�es de ce clic et placer des ronds de couleurs dans les cases voulues.
    Pour le r�cup�rer, rien de plus simple.
    Lorsque l'on sp�cifie la fonction li�e � un �v�nement (ici en l�occurrence un simple clic gauche) dans la m�thode bind, tkinter transmet � la fonction que tu as indiqu� un objet Event.
    N'h�site pas � faire des print, dir pour bien comprendre ce que contient cet objet pass� par tkinter � ta fonction clic, donc ici ce qui t'int�resses, ce sont les coordonn�es X et Y du clic.

    Donc ceci n'est pas correct :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    def clic(event):
        global joueur,canevas,j,p
        i = event.x
        j = case(x)
    x n'existe pas dans ta fonction clic.
    Ce qui t'int�resse, ce sont event.x et event.y, soit les coordonn�es x et y du clic sur ton canevas.
    Un print(dir(event)) te montreras ce que event contient.

    Maintenant pour tracer un cercle sur ton canevas, il te suffit de d�finir une autre fonction s'occupant de cette t�che, que tu appelleras justement dans ta fonction clic.

  7. #7
    Membre �m�rite
    Homme Profil pro
    Aucune activit�
    Inscrit en
    Novembre 2011
    Messages
    505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Aucune activit�

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par d�faut
    Citation Envoy� par MinyMiny Voir le message
    J'ai lu un peu lu le livre que vous m'avez conseiller regarder votre algorithme mais j'ai du mal � faire le lien avec mon programme. J'ai compris comment faire le lien entre un clic et une fonction mais j'ai toujours du mal � comprendre comment r�cup�rer les donn�es de ce clic et placer des ronds de couleurs dans les cases voulues.
    Voil� ce que j'ai chang� et j'ai toujours des erreurs :
    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
    def clic(event):
        global joueur,canevas,j,p
        i = event.x
        j = case(x)
        jouer(p)
        p=3-p
     
     
        if p==1:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='yellow',outline='#018CD2')
        else:
            for j in range(7):
                for i in range(6):
                    canevas.create_oval(100*j+50-45,100*x+50-45,100*j+50+45,100*x+50+45,width=5,fill='red',outline='#018CD2')
     
     
    canevas.bind('<ButtonPress-1>',clic)
     
     
    #-------------------CORPS DU PROGRAMME----------------------
     
    choix_adv()
     
    fenetre.mainloop()
    Que faire ? Merci
    Bonjour,
    Il n'est pas suffisant de parcourir! Il faut au moins essayer de comprendre

    J'ai donn� la structure au post 4

    Avez-vous au moins regard� ce que raconte le message d'erreur?


    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
    from tkinter import*
    fenetre = Tk()
    import random
     
     
    #creation du canevas :
    canevas=Canvas(fenetre)
    canevas.configure(width=700,height=600,bg='#0048B5')
    canevas.grid(row = 1,column = 1,padx = 20,pady = 20)
     
    #cercle
    for j in range(7):
        for i in range(6):
            canevas.create_oval(100*j+50-45,100*i+50-45,100*j+50+45,100*i+50+45,width=5,fill='white',outline='#018CD2')
     
    #Liaison avec l'utilisateur: permet de récupérer les coordonnées de la souris
    canevas.bind('<ButtonPress-1>',clic)
     
    fenetre.mainloop()
    Ici, l'affichage de la grille ainsi que le lien avec l'utilisateur sont ok.

    A vous ensuite de convertir les coordonn�es (x, y) retourn�es par "event" pour retrouver la case correspondante et v�rifier que la case est valide et tout ce qui va ensuite.

    La fonction "choix_adv ():" peut tout � fait �tre ins�r�e avant le "mainloop", mais elle ne doit pas appeler la fonction "joueur" qui lance le jeu car celui-ci doit �tre pilot� par l'interface graphique.
    C'est le clic qui va d�clencher chaque �tape du jeu. � chaque fois vous devrez v�rifier s'il y a ou non une victoire.

    Clodion

  8. #8
    Membre r�gulier Avatar de MinyMiny
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par d�faut
    Ca y est ! J'ai r�ussi � colorier les cases et r�cup�rer leurs coordonn�es gr�ce � la fonction clic(event) mais maintenant je ne sais pas o� placer le clic(event) pour qu'il co�ncide avec le reste du code. Une id�e ?
    Voil� ce que j'ai modifi� :
    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
    def case (x):
        if 0<=x<=100:
            return 0
        if 100<=x<=200:
            return 1
        if 200<=x<=300:
            return 2
        if 300<=x<=400:
            return 3
        if 400<=x<=500:
            return 4
        if 500<=x<=600:
            return 5
        if 600<=x<=700:
            return 6
     
     
    def clic(event):
        global p,j,i
        p=2
        x = event.x
        j = case(x)
        i=0
        while i<6 and grille[i][j] == 0:
                i = i+1
        grille[i-1][j] = p
     
        print(j)
        oval()
     
     
    def oval():
        global p,j,i
        if p==1:
            for x in range(7):
                for l in range(6):
                    canevas.create_oval(100*j+50-45,100*i+50-45,100*j+50+45,100*i+50+45,width=5,fill='yellow',outline='#018CD2')
        else:
            for x in range(7):
                for l in range(6):
                    canevas.create_oval(100*j+50-45,100*i+50-45,100*j+50+45,100*i+50+45,width=5,fill='red',outline='#018CD2')
     
     
     
    canevas.bind('<ButtonPress-1>',clic)
     
     
    #-------------------CORPS DU PROGRAMME----------------------
     
     
    choix_adv()
     
    fenetre.mainloop()

  9. #9
    Membre tr�s actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par d�faut
    Tu n'as pas bien compris.

    Relis un didacticiel sur tkinter comme te l'as conseill� Clodion et exp�rimente, teste des choses simples, car l� tu fais un peu n'importe quoi sans r�ellement comprendre.

    Tes boucles for et while n'ont rien a faire dans tes fonctions clic et oval.

    Ta fonction clic doit r�cup�rer les coordonn�es d'un point du canevas, et les transmettre en param�tre � ta fonction oval, qui elle s'occupera de tracer un cercle en fonction de la coordonn�e de ce point.

  10. #10
    Membre r�gulier Avatar de MinyMiny
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2016
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par d�faut
    Bonjour, finalement je vais faire beaucoup plus simple car j'ai beau regarder des tutos, tester des trucs, lire des livres, je n'y arrive pas...
    Je n'ai vraiment pas le niveau et pas le temps non plus alors j'ai trouv� plus simple mais je suis coinc� sur un truc tout b�te que je n'arrive pas � comprendre :
    Pourquoi �a, fonctionne (la grille appara�t correctement) :
    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
    from tkinter import*
    def affichage():
     
     
        fenetre = Tk()
        print("test")
        canevas=Canvas(fenetre)
        canevas.configure(width=700,height=600,bg='#0048B5')
        canevas.grid(row = 1,column = 1,padx = 20,pady = 20)
     
     
        for k in range(7):
            for l in range(6):
                canevas.create_oval(100*k+50-45,100*l+50-45,100*k+50+45,100*l+50+45,width=5,fill='white',outline='#018CD2')
     
     
    affichage()
    Et pas �a (la grille ne s'affiche 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
    from tkinter import*
    def affichage():
     
     
        fenetre = Tk()
        print("test")
        canevas=Canvas(fenetre)
        canevas.configure(width=700,height=600,bg='#0048B5')
        canevas.grid(row = 1,column = 1,padx = 20,pady = 20)
     
     
        for k in range(7):
            for l in range(6):
                canevas.create_oval(100*k+50-45,100*l+50-45,100*k+50+45,100*l+50+45,width=5,fill='white',outline='#018CD2')
     
    def test():
        affichage()

  11. #11
    Membre �m�rite
    Homme Profil pro
    Aucune activit�
    Inscrit en
    Novembre 2011
    Messages
    505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Aucune activit�

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par d�faut
    Citation Envoy� par MinyMiny Voir le message
    Bonjour, finalement je vais faire beaucoup plus simple car j'ai beau regarder des tutos, tester des trucs, lire des livres, je n'y arrive pas...
    Je n'ai vraiment pas le niveau et pas le temps non plus alors j'ai trouv� plus simple mais je suis coinc� sur un truc tout b�te que je n'arrive pas � comprendre :
    Pourquoi �a, fonctionne (la grille appara�t correctement) :
    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
    from tkinter import*
    def affichage():
     
     
        fenetre = Tk()
        print("test")
        canevas=Canvas(fenetre)
        canevas.configure(width=700,height=600,bg='#0048B5')
        canevas.grid(row = 1,column = 1,padx = 20,pady = 20)
     
     
        for k in range(7):
            for l in range(6):
                canevas.create_oval(100*k+50-45,100*l+50-45,100*k+50+45,100*l+50+45,width=5,fill='white',outline='#018CD2')
     
     
    affichage()
    Et pas �a (la grille ne s'affiche 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
    from tkinter import*
    def affichage():
     
     
        fenetre = Tk()
        print("test")
        canevas=Canvas(fenetre)
        canevas.configure(width=700,height=600,bg='#0048B5')
        canevas.grid(row = 1,column = 1,padx = 20,pady = 20)
     
     
        for k in range(7):
            for l in range(6):
                canevas.create_oval(100*k+50-45,100*l+50-45,100*k+50+45,100*l+50+45,width=5,fill='white',outline='#018CD2')
     
    def test():
        affichage()
    Il n'est pas possible que vous ayez regard� des tutos.
    C'est le "B", "A" "BA" des tutoriels.
    Je vous en ai parl� dans mon premier message.

    � lire absolument: G.Swinnen (pas � parcourir, ni � survoler, ni � regarder les images, non, � lire).

    Clodion
    PS: une fonction s'appelle.

Discussions similaires

  1. [Lecture de FichierXML] <--Gros probl�me
    Par waldo2188 dans le forum Entr�e/Sortie
    R�ponses: 3
    Dernier message: 18/03/2005, 17h15
  2. gros probl�me id
    Par S�kiltoyai dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 20/12/2004, 11h53
  3. Gros probl�me avec la facturation de Tiscali
    Par Harry dans le forum D�pannage et Assistance
    R�ponses: 5
    Dernier message: 21/10/2004, 18h55
  4. Gros probl�me de session/cookies
    Par valfredr dans le forum XMLRAD
    R�ponses: 18
    Dernier message: 03/06/2004, 09h21
  5. Gros Probl�me avec DirectShow et la m�thode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    R�ponses: 3
    Dernier message: 10/03/2003, 18h10

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