Zmatt
Messages postés1Date d'inscriptiondimanche 18 mai 2014StatutMembreDernière intervention18 mai 2014
-
Modifié par Zmatt le 18/05/2014 à 15:41
Supafresh
Messages postés40Date d'inscriptionsamedi 1 février 2014StatutMembreDernière intervention 7 août 2014
-
19 mai 2014 à 21:30
Bonjour,
Je suis débutante en python, et je suis entrain de programmer un jeu de sudoku avec interface graphique sauf que je ne connais pas très bien tkinter.
Dans mon programme je voulais que l'utilisateur puisse cliquer sur un case puis cliquer sur un bouton remplacer ou effacer. J'ai reussi a faire un pointeur pour trouver les coordonnées mais après je ne sais pas comment faire pour récuperer ces coordonnées pour les utiliser avec les autres fonctions.
Je ne sais pas si je suis très claire mais voici mon programme pour l'instant :
#sudoku
listedeliste=[l0,l1,l2,l3,l4,l5,l6,l7,l8] copie_liste=[0]*9 for i in range(9): copie_liste[i]=[0]*9 for j in range(9): copie_liste[i][j]=listedeliste[i][j]
def pointeur(event): global i0,j0 i0,j0 = ceil(9/360*event.x),ceil(9/360*event.y) chaine.configure(text = "Clic detecte en X =" + str(i0) +\ ", Y =" + str(j0))
def communication(event): n=une_entree.get()
# vérifie que le chiffre ne se trouve pas déjà dans la ligne ou dans la colonne def validationCL(i,j,n,listedeliste): valide=True if(listedeliste[i][j]==0): for a in range(9): colonne=listedeliste[a][j] ligne=listedeliste[i][a] if(colonne==n or ligne==n): valide=False texte2=Label(fenetre,text="Le chiffre est mauvais") texte2.pack() for i in range(9): for j in range(9): x=i*40+15 y=j*40+25 canevas.create_text(x,y,fill="black",text=listedeliste[j][i])
else: valide=False texte3=Label(fenetre,text="Il y a déjà un chiffre à cet emplacement") texte3.pack() for k in range(len(listedeliste)): print(listedeliste[k]) return valide
# vérifie que le chiffre ne se trouve pas dans le carré def balcarré(i,j,n): valide=True haut=i//3 long=j//3 for k in range(3): for l in range(3): if(listedeliste[3*haut+k][3*long+l]==n): valide=False texte4=Label(text="le chiffre est mauvais car il est déjà présent dans le carré") texte4.pack()
return valide
def effacer_case(i0,j0): if(copie_liste[i0][j0]==0): listedeliste[i0][j0]=0 for i in range(9): for j in range(9): x=i*40+15 y=j*40+25 canevas.create_text(x,y,fill="black",text=listedeliste[j][i]) else: texte5=Label(text="vous ne pouvez pas remplacer ce nombre") texte5.pack() for i in range(9): for j in range(9): x=i*40+15 y=j*40+25 canevas.create_text(x,y,fill="black",text=listedeliste[j][i])
def remplacer_case(i0,j0,n): z=balcarré(i0,j0,n) if(z==True): w=validationCL(i,j,n,listedeliste) if(w==True): listedeliste[i][j]=n for i in range(9): for j in range(9): x=i*40+15 y=j*40+25 canevas.create_text(x,y,fill="black",text=listedeliste[j][i])
def nbzero(listedeliste): nb=0 nombre=0 for i in range(9): nombre=listedeliste[i].count(0) nb=nb+nombre return nb
#prg principal def grille(): global listedeliste for i in range(1,9): canevas.create_line(40*i,0,40*i,360,fill="black") canevas.create_line(0,40*i,360,40*i,fill="black") for i in range(9): for j in range(9): x=i*40+15 y=j*40+25 canevas.create_text(x,y,fill="black",text=listedeliste[j][i])
fenetre=Tk()
#widgets texte1=Label(fenetre,text="Rentrer le nombre a remplacer : ") texte1.pack()
Bonjour, a partir des coordonnees tu peux retrouver la valeur correspondante en faisant monTabDeVal[x][y] = varStock. Comme cela, grace aux coordonnees tu stocke la valeur que tu veux dans varStock. Pour l'utiliser dans d'autres fonctions, tu met varStock en parametre de tes fonctions. Ne parle pas de pointeur s'il te plait car il n'y a pas son implementation en Python.