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

GUI Python Discussion :

Effacer un nombre dans un canvas


Sujet :

GUI Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Effacer un nombre dans un canvas
    Bonjour

    Je souhaite effacer un nombre entrer par mes bouton dans ma grille, je me sers donc de Can.delete(x) mais je n'arrive pas à la faire fonctionner. Quelqu'un aurait il une idée de mon problème ?

    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
    169
    170
    171
    172
    173
    174
    175
    import random
    from pylab import*
    import numpy
    from random import*
    import copy
    from tkinter import*
    from random import*
    global G
     
    def GrilleRandom():
        global G,n, A
        n=4  #Dimensions du Sudoku
        G = array([[int(n) for x in range(0,n)] for y in range(0,n)], dtype=object)
        G[0] = sample(range(1,n+1), n)          #on créée une première ligne aléatoire de chiffres tous différents
        x = 1                                   #on commence donc le x à la seconde ligne
        y = 0                                   #on commence à la première colonne
        while x<n and y<n:                      #tant que x et y sont inférieur au maximum de la grille (4)
     
            m =[]                               #Nombres déjà utilisés dans les cellules et qui ne peuvent être réutilisés
            choix =[]                           #Liste des nombres qui peuvent être utilisés pour une cellule donnée
            for T in range (0,x):               #on lit la liste sur toutes les lignes, soit de 0 à 4
                m.append(G[T][y])               #on ajoute à la liste chaque nombres utilisés*
                T=T+1                           #on indente la liste et on recommence
     
            if y!=0:                            #Même manipulation cette fois pour les ordonnées
                for T in range (0,y):
                    m.append(G[x][T])
                    T=T+1
     
            #Pour savoir si un nombre est pair, on fait son modulo et si son reste est égal à 0, alors il est pair
     
            if x%2!=0:
                if (x+y)%2!=0:                  #on a remarqué que lorsque x est pair, (seconde et quatrième ligne),
                        m.append(G[x-1][y+1])   #les nombres en haut à gauche et en haut à droite doivent être différents/
                else:                           #En cherchant quand la somme de x et de y est pair, on peut déterminer quels nombres
                        m.append(G[x-1][y-1])   #enregistrer dans la liste m, soit ceux déjà utilisés
                                                #donc quand x+y est pair, on enregistre le nombre en haut à droite
                                                #et quand x+y est impair, on enregistre le nombre en haut à gauche
     
     
            for k in range (1,n+1):             #on lit k de 1 à 4
                if k not in m:                  #si un nombre n'appartient pas à la liste m, alors on l'ajoute à une novuelle liste
                    choix.append(k)
                k=k+1                           #on indente
     
            if len(choix)!=0:                    #on lit toute la liste choix avec len
                    G[x][y]=choice(choix)        #le programme choisit un nombre aléatoire dans la liste choix, qui changera à chaque ligne/ordonnée
            else:
                x=1
                y=0
            y=y+1                                #on indente les ordonnées, jusqu'à 4
            if y==n:
                y=0
                x=x+1
                                         #quand y=4, on indente les lignes
        A = G.copy()
     
    GrilleRandom()
     
    def GrilleSuppr():
        p = o =0
        while p<n and o<n:
     
            a = ''
            G[o][p]=a
            G[o][randint(2,3)]=a
            G[randint(2,3)][p]=a
     
            p = p + 1
            o = o + 1
    GrilleSuppr()
     
    ecriture=("comic sans ms",13)
    nbcase=4
    case=100
    x0,y0=9,9
    chifre=[1,2,3,4]
     
     
    def zut():
        ntm=Toplevel()
     
        def fin ():
            fenetre.quit()
            fenetre.destroy()
     
        def grille():
            for i in range(nbcase+1):
                Can.create_line(x0+case*i, y0,x0+case*i,y0 + nbcase*case)
                Can.create_line(x0, y0+case*i,x0+nbcase*case ,y0+case*i)
                for m in range (0,4):
                    Can.create_text(60,(m+0.6)*100,text=G[m][0])
                    Can.create_text(160,(m+0.6)*100,text=G[m][1])
                    Can.create_text(260,(m+0.6)*100,text=G[m][2])
                    Can.create_text(360,(m+0.6)*100,text=G[m][3])
     
        def place_number(event):
            TexteC.delete("0.0",END)# on efface l'écriture précédente
            TexteC.insert(END,"clic detecte en x="+str(event.x) + " et y = " + str(event.y))
            a=(event.x)//100 #ici a est censé récupéré la position du clic pour ce qui est des abscisses
            b=(event.y)//100 #ici b fait la même chose que b mais pour lees ordonnées
            text = current
            Can.create_text(a,b,text=text) #ici la fonction est censé afficher le texte au coordonées a et b
            Can.create_text((a+0.5)*100+10,(b+0.5)*100+10,text=text) #ici on ajoute 0,5 à a et b pour centrer le nombre dans la case
     
        def jouer(event):
            global trouve
            [i,j]=correspond(event.x,event.y)
            if i in range(nb) and j in range (nb):   # on ne fait rien si le click est hors grille
                Can.create_rectangle(x0 +case*j,y0+case*i,x0 +case*(j+1),y0+case*(i+1),fill=coul(i,j))
     
        def GrilleVérification():
            global G
            a = "Vous avez juste"
            b = 0
            for p in range(0,4):
                for o in range(0,4):
                    if G[o][p]!=A[o][p]:
                        b= b + 1
            if b==1:
                a = "Vous avez " +b+ "erreur"
            else:
                if b>1:
                    a = "Vous avez" +b+ "erreurs"
     
        def Supprimer():
            Can.delete(TexteC)
     
        def display(x):
            def wrap():
                global current
                current = x
            return wrap
     
     
        Cadre=Frame(ntm)
        Texte1=Label(ntm,text="Jeu du Sudoku",fg="red",font=ecriture)
        BouttonQuit=Button(ntm,text="quitter", command=fin)
        BouttonJouer=Button(ntm,text="jouer", command=grille)
        TexteC=Text(ntm,height=25,width=25)
        Can=Canvas(ntm,height=500,width=500,bg="white")
        Bouton1=Button(ntm,text="4",command=display('4'))
        Bouton2=Button(ntm,text="3",command=display('3'))
        Bouton3=Button(ntm,text="2",command=display('2'))
        Bouton4=Button(ntm,text="1",command=display('1'))
        Bouton5=Button(ntm,text="Vérifier",command=GrilleVérification)
        Bouton6=Button(ntm,text="Supprimer",command=Supprimer)
     
        Texte1.grid(row=0,column=0)
        BouttonQuit.grid(row=50, column=100)
        Cadre.grid(row=1,column=0)
        Can.grid(row=1, column=0)
        BouttonJouer.grid(row=0, column=50)
        TexteC.grid(row=1, column=3)
        Bouton1.grid(row=45, column=49)
        Bouton2.grid(row=45, column=48)
        Bouton3.grid(row=45, column=47)
        Bouton4.grid(row=45, column=46)
        Bouton5.grid(row=50, column=50)
        Bouton6.grid(row=50, column=60)
     
        Can.bind("<Button-1>",place_number)
     
    fenetre=Tk()
     
     
     
    Texte=Label(fenetre,text="Bienvenue dans le jeu de sudoku",fg="red",font=ecriture)
    Texte.grid(row=0,column=3)
     
    Boutoniveau1=Button(fenetre,text="Niveau 1",command=zut)
    Boutoniveau1.grid(row=2,column=3)
     
     
    fenetre.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut

    Citation Envoyé par Le chaos Voir le message
    Je souhaite effacer un nombre entrer par mes bouton dans ma grille, je me sers donc de Can.delete(x) mais je n'arrive pas à la faire fonctionner. Quelqu'un aurait il une idée de mon problème ?
    La méthode .create_(item) ou item = text, widget, rectangle,... retourne l'identifiant de l'item.
    C'est et identifiant là qu'il faut passer à .delete.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> import tkinter as tk
    >>> w = tk.Canvas()
    >>> w.pack()
    >>> iid = w.create_text(20, 20, text='abcd')
    >>> w.delete(iid)
    >>>
    Vous pouvez aussi associer une chaine de caractère à l'item via tag=... et utiliser ce "tag".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci. Mais est ce que ce qui est codé à la ligne 129 de mon code n'est pas juste.
    De plus je n'ai pas réussi a appliquer ta méthode car mes informations sont codées dans la grille à l'aide de boutons.
    As tu une idée de comment a adapter cette méthode à mon code ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Le chaos Voir le message
    Merci. Mais est ce que ce qui est codé à la ligne 129 de mon code n'est pas juste.
    Il y a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        def Supprimer():
            Can.delete(TexteC)
    or TexteC est instance d'un widget Text, rien à voir avec l'item d'un canvas...

    Citation Envoyé par Le chaos Voir le message
    As tu une idée de comment a adapter cette méthode à mon code ?
    Comme je ne comprends pas comment l'utilisateur arrive à désigner ce qui doit être supprimé... pas facile de savoir à partir de quelle information, on va choisir l'item à supprimer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/01/2024, 15h32
  2. Réponses: 5
    Dernier message: 22/04/2008, 15h49
  3. Comment effacer le dessin dans un Canvas ?
    Par RoM_CoOl dans le forum Langage
    Réponses: 11
    Dernier message: 29/11/2007, 16h11
  4. [FSO] Effacer une ligne dans un fichier
    Par Johnbob dans le forum ASP
    Réponses: 4
    Dernier message: 30/05/2007, 16h23
  5. Effacer une ligne dans la table nat
    Par vbcasimir dans le forum Sécurité
    Réponses: 2
    Dernier message: 11/01/2004, 00h15

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