Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/02/2013, 16h01   #1
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Par défaut Projet : Sud-O-Cul

Bonjour, j'essaye de réaliser un sudoku mais je bloque, j'ai créer une fenêtre, et j'ai dessiné des lignes verticalement et horizontalement, 9 cases par lignes et colonnes.

Mon problème est, comment faire pour rentrer des chiffres à l'intérieur de ces cases ? Faut-il trouver la position de chaque case ?

Et savez vous comment faire pour sauter des lignes dans messagebox.showinfo ? J'ai chercher mais je trouve pas, normalement, on utilise \n mais ça ne marche pas du tout.

Merci de votre aide.

Code :
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
from tkinter import*
from tkinter import messagebox
import tkinter as Tk
 
 
sudoku = Tk.Tk()
sudoku.title(" Sudoku ")
 
 
 
 
def About () : messagebox.showinfo (title="A propos", message = "Version 1.0")
def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
 
 
 
mainmenu = Tk.Menu(sudoku)
menu_partie = Tk.Menu(mainmenu)
menu_partie.add_command(label="Quitter le jeu", command=sudoku.destroy)
 
menu_help = Tk.Menu(mainmenu)
menu_help.add_command(label="Comment jouer", command= Comment_jouer)
menu_help.add_command(label=" A propos", command = About)
 
mainmenu.add_cascade (label= "Partie", menu=menu_partie)
mainmenu.add_cascade(label= "Aide", menu=menu_help)
 
 
sudoku.config(menu=mainmenu)
 
 
surface_dessin = Canvas(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
surface_dessin.pack()
 
 
scale = 480/9;
 
for i in range(0, 10):
    if (i!=4) and (i!=7) :
        surface_dessin.create_line(i*scale, 0, i*scale, 580, width =1);
    else :
        surface_dessin.create_line(i*scale, 0, i*scale, 580, width =3);
 
 
 
for j in range (0, 10) :
    if (j!=4) and (j!=7) :
        surface_dessin.create_line (0, j*scale, 580, j*scale, width = 1) ;
    else :
        surface_dessin.create_line (0, j*scale, 580, j*scale, width = 3) ;
 
 
 
 
 
 
 
 
 
 
 
 
sudoku.mainloop()
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2013, 15h37   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,
Vous avez tout ce qu'il faut dans ce post
- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2013, 22h55   #3
rambc
Membre Expert
 
Inscription : décembre 2006
Messages : 2 197
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 2 197
Points : 1 221
Points : 1 221
Un peu trop kuku le titre...
rambc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2013, 18h34   #4
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Bonsoir, merci beaucoup pour le lien. Il m'a été un chouïa utile, difficile de bien comprendre le codage.

J'ai essayé de comprendre son code pour l'ajout de chiffre mais je ne comprends comment il a fait, quelqu'un peut m'expliquer ?

Ou bien avez vous une autre solution pour cliquer à un endroit et y rentrer un chiffre au centre de la case sachant que ce n'est pas vraiment une case ?

Je ne sais pas si vous allez me comprendre

Merci encore de votre aide.
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2013, 20h28   #5
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,
C'est pas si compliqué!

A la construction d'une instance de SudokuGrid, il y a un:
Code :
        self.bind('<KeyPress>', self.on_keyPress)
le callback sera appelé à chaque Key Press.
Ca déroule:
Code :
1
2
3
4
5
    def on_keyPress(self, event):
        value = event.keysym if event.keysym in '123456789' else ''
        iid = self.find_withtag('current')[0]
        if iid in self._items:
            self._items[iid].set_value(value)
En français, on récupère le caractère tapé (.keysym)
S'il est dans 1..9 on positionne "value" à sa valeur sinon value devient ''.
".find_withtag('current')[0]" permet de récupérer l'identifiant de l'objet 'current'.
Puis on cherche à quelle Cell il correspond via la map "._items".
Si on trouve un Cell, on délègue le reste du boulot à la méthode .set_value

Code :
1
2
3
4
5
6
7
8
    def set_value(self, value, initial=False):
        itemconfig = self.canvas.itemconfigure
        s = str(value) if value else ''
        itemconfig(self._label, text=s)
        self.value = value
        if initial:
            self.disable()
            self._is_initial = True
Le paramètre value pouvant être "int" ou "str", null ou vide on le convertit en "str" dans s. self._label contient l'item Text à mettre à jour: un coup d'itemconfigure et puis voilà.

Ce code ne fait "qu'afficher" et gérer des événements de "base".
Côté permettre à un utilisateur de "jouer" une grille, il sait charger la grille initiale mais il ne s'occupe pas du tout de valider les nombres entrés: le dialogue avec l'utilisateur et la gestion de l'état du jeu sont "à faire".

s/classer ou modifier le code existant sera probablement nécessaire selon "l'user expérience" que vous voudrez réaliser.

- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 13h55   #6
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Je te remercie pour ton aide !

Si ça te dérange pas, tu pourrais me dire quel est la fonction que tu utilises ? Parce que je me vois pas sortir ce code du jour au lendemain et puis, à vrai dire, j'y comprends pas grand chose, je suis qu'un débutant hein, pas amateur
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 14h05   #7
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,
De quelle fonction parles-tu?
- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 14h11   #8
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Je ne sais pas si c'est une fonction mais quand t'utilises self.bind. Même ceux avec les self.
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 15h52   #9
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Reprenez votre code initial:
Code :
1
2
3
4
5
6
7
8
9
10
surface_dessin = Canvas(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
surface_dessin.pack()
 
scale = 480/9;
 
for i in range(0, 10):
    if (i!=4) and (i!=7) :
        surface_dessin.create_line(i*scale, 0, i*scale, 580, width =1);
    else :
        surface_dessin.create_line(i*scale, 0, i*scale, 580, width =3);
surface_dessin est une variable globale contenant une instance de "Canvas".

surface_dessin.create_line appelle la méthode .create_line de ce "canvas".
.bind est autre une méthode du Canvas tk (comme .create_line)
Plutôt que d'écrire çà dans le script "principal", on pourrait pousser/cacher ce code dans une fonction:
Code :
1
2
3
4
5
6
7
def create_lines(canvas):
    scale = 480/9
    for i in range(0, 10):
        if (i!=4) and (i!=7) :
        canvas.create_line(i*scale, 0, i*scale, 580, width =1);
    else :
        canvas.create_line(i*scale, 0, i*scale, 580, width =3);
Pour l'exécuter, ce sera: create_lines(surface_dessin)

Mais on peut, aussi dire, que le sudoku se joue sur un Grid, sous/classe de Canvas et des méthodes particulières dedans.
C'est juste réorganiser le code qui précède en:
Code :
1
2
class Grid(tk.Canvas):
    create_lines = create_lines
Pour l'utiliser:
Code :
1
2
3
surface_dessin = Grid(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
surface_dessin.pack()
surface_dessin.create_lines()
A la syntaxe prêt, "create_lines" fonction et ".create_lines" méthode déroulent in fine le même code. C'est ce que souligne le "create_lines = create_lines".

Si on déclare le "corps" de la fonction dans la déclaration de la classe, la convention est de nommer, "self" la variable qui représente le "canvas" (et premier paramètre de la fonction qui prend alors le nom de "méthode" qui s'applique alors à une classe).

- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 16h32   #10
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Je suis un peu perdu

Si j'ai bien compris, vous avez réorganiser mon code, c'est bien ça ?
Je ne comprends pas pourquoi vous mettez le code pour créer les lignes dans une fonction puisqu'on l'invoque qu'une seule fois non ?

J'ai essayé ce que vous m'avez dit mais il y a un soucis, ou peut-être que c'est moi le problème, pouvez vous vérifier ? Merci.

Code :
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
from tkinter import*
from tkinter import messagebox
import tkinter as Tk
 
 
 
sudoku = Tk.Tk()
sudoku.title(" Sudoku ")
 
 
 
 
def About () : messagebox.showinfo (title="A propos",)
def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
 
def create_lines(canvas):
    scale = 480/9
    for i in range(0, 10):
        if (i!=4) and (i!=7) :
            canvas.create_line(i*scale, 0, i*scale, 580, width =1);
    else :
        canvas.create_line(i*scale, 0, i*scale, 580, width =3);
 
def create_lines (canvas) :
    scale = 480/9
    for j in range (0, 10) :
        if (j!=4) and (j!=7) :
            canvas.dessin.create_line (0, j*scale, 580, j*scale, width = 1) ;
    else :
        canvas.dessin.create_line (0, j*scale, 580, j*scale, width = 3) ;
 
mainmenu = Tk.Menu(sudoku)
menu_partie = Tk.Menu(mainmenu)
menu_partie.add_command(label="Quitter le jeu", command=sudoku.destroy)
 
menu_help = Tk.Menu(mainmenu)
menu_help.add_command(label="Comment jouer", command= Comment_jouer)
menu_help.add_command(label=" A propos", command = About)
 
mainmenu.add_cascade (label= "Partie", menu=menu_partie)
mainmenu.add_cascade(label= "Aide", menu=menu_help)
 
 
sudoku.config(menu=mainmenu)
 
 
 
 
class Grid(tk.Canvas):
    create_lines = create_lines
 
 
surface_dessin = Grid(sudoku, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
surface_dessin.pack()
surface_dessin.create_lines()
 
 
 
 
 
 
sudoku.mainloop()
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2013, 17h35   #11
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,

Citation:
Je ne comprends pas pourquoi vous mettez le code pour créer les lignes dans une fonction puisqu'on l'invoque qu'une seule fois non ?
Pour découper la longue séquence d'opérations qui construit l'interface en étapes logiques. Ca aide à structurer le programme en leur donnant un nom particulier, limiter la dépendance avec des variables globales,...

Dans l'exemple ci dessous, j'ai crée une fonction "create_menu" pour regrouper les créations de menu et j'ai déplacé le reste sous "if __name__ == '__main__':".

Code :
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
from tkinter import messagebox
import tkinter as tk
 
def About () : messagebox.showinfo (title="A propos",)
def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
 
def create_lines(canvas):
    scale = 480/9
    for i in range(0, 10):
        if (i!=4) and (i!=7) :
            canvas.create_line(i*scale, 0, i*scale, 580, width =1);
    else :
        canvas.create_line(i*scale, 0, i*scale, 580, width =3);
 
def create_menu(app):
 
    menu = tk.Menu(app)
 
    m = tk.Menu(menu)
    m.add_command(label="Quitter le jeu", command=app.destroy)
    menu.add_cascade (label= "Partie", menu=m)
 
    menu.add_command(label="Comment jouer", command= Comment_jouer)
    menu.add_command(label=" A propos", command = About)
 
    app['menu'] = menu
 
if __name__ == '__main__':
    app = tk.Tk()
    app.title(" Sudoku ")
 
    create_menu(app)
    grid = tk.Canvas(app, width=480, height=480, bg='SaddleBrown', bd = 55, relief="ridge")
    grid.pack()
    create_lines(grid)
 
    app.mainloop()
"Rangé ainsi", est-ce que ce code n'est pas un peu plus lisible?
Vous êtes intéressé au premier chef par la lisibilité du code que vous mettez au point: à vous de voir.

- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 15h52   #12
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
En effet, c'est beaucoup plus organiser. Je ne comprends pas le "if __name__ == '__main__':" ; vous avez dit que vous avez déplacé le reste, je ne vois pas quel reste, j'ai comparé le mien et le vôtre, et je ne comprends pas, pouvez vous m'éclaircir ?


Ensuite, pour le clique de la souris, il faut l'ajouter comme tel dans mon code ?
J'ai essayé le code mais je n'arrive toujours pas à rentrer des chiffres dans les cases, faut-il que j'utilise le widget entry ?

Merci de votre patience !
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 19h46   #13
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,

Si votre ambition est de faire un jeu de sudoko avec une interface graphique construite avec tkinter, il faudra écrire quelques centaines de lignes de code.

Si vous décider de passer par le widget Canvas pour afficher la grille et "interagir" avec l'utilisateur, il va falloir prendre le temps de regarder comment fonctionne ce widget Tk. Ca passe par la réalisation de bouts de code qui:
  • dessinent les carreaux,
  • affiche la grille initiale,
  • savoir comment l'utilisateur pourra définir dans quelle case devra être affiché le chiffre tapé.
Pour l'instant, vous savez dessiner des carreaux. C'est bien.

Comment afficher la grille initiale? Avec un canvas difficile de ne pas utiliser .create_text. Comment savoir quelle case l'utilisateur veut jouer?
Dans mon code, une case est créé par .create_rectangle et son bord devient rouge lorsque la souris est positionné dessus. S'il tape un chiffre l'item text associé à la case est mis à jour.

Vous voulez réaliser cela autrement, très bien!
Essayez de le coder, si vous rencontrez des difficultés, montrez comment vous avez essayé de... tous ceux qui lisent ce forum pourront essayez de vous aider.
Mais lire la documentation Tk, définir les widgets à utiliser, les secouer un peu pour comprendre ce qu'ils font,... sont des activités que personne ne fera à votre place (c'est comme pour aller pisser).

- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 19h37   #14
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Désolé pour ma réponse tardive.

Je vais essayer de coder sa, je reviendrais plus tard.

Quand vous dîtes afficher la grille initiale, je ne comprends pas, c'est à dire ? Faire en sorte que python considère ce qu'on a tracé en tant que grille ?

Vous me conseillez donc d'aller consulter la partie sur .create_text pour afficher la grille initial ?
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2013, 20h39   #15
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Citation:
Envoyé par Pytdeb Voir le message
Vous me conseillez donc d'aller consulter la partie sur .create_text pour afficher la grille initial ?
Comment envisagiez vous d'afficher un nombre dans la grille que vous avez dessiné dans le Canvas? Si vous avez mieux que .create_text, pourquoi pas mais je demande à voir!

- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2013, 16h08   #16
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Bonjour,

je suis bloqué, j'essaye d'utiliser create_text mais je ne sais pas quoi faire. Pour la position, je ne vois pas quoi mettre. J'ai commencé avec :

def create_text (canvas):
app.create_text( )

Faudrait-il que je définisse ce qu'est une case ? Pouvez vous m'indiquer le chemin à suivre ? Je commence à devenir fou
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2013, 18h16   #17
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Salut,

.create_text est une méthode du Canvas Tk (comme .create_rectangle).
Pour la position, il y a 9x9=81 cases dans la grille.
La position du "text" dans la case (r, c) pourrait être son centre.
(r, c) étant le numéro de row, column

Après c'est des règles de trois: quelles sont largeur et hauteur (width, height) du Canvas? Divisé par 9 çà donne la largeur x hauteur d'une case. A partir de là, on peut calculer la position du coin de la case (r, c), son centre.

Citation:
Faudrait-il que je définisse ce qu'est une case ? Pouvez vous m'indiquer le chemin à suivre ? Je commence à devenir fou
La "case" est un objet élémentaire du jeu de Sudoku: elle aura une ligne, une colonne et sera dans une zone 3x3: elle devra avoir une valeur dans 1..9 différentes de celles qui sont même ligne, même colonne, même zone.
Elle sera remplie initialement ou devra l'être par le joueur (comment le joueur pourra désigner la case qu'il souhaite "jouer"?).

La notion de case est bien définie.
Coder c'est décider comment seront représentées les différentes propriétés de la "case". Afficher la valeur quelle contient au bon endroit de votre grille, est un aspect de ce "comment"...

Bon courage,
- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2013, 20h32   #18
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Voilà, j'ai essayé sa mais je ne sais pas comment faire pour rendre sélectionnable la case.
Code :
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
from tkinter import messagebox
import tkinter as tk
 
def About () : messagebox.showinfo (title="A propos",)
def Comment_jouer () : messagebox.showinfo ("Comment jouer ?", "Le but du jeu est de remplir ces cases avec des chiffres allant de 1 à 9 en veillant toujours à ce qu'un même chiffre ne figure qu'une seule fois par colonne, une seule fois par ligne, et une seule fois par carré de neuf cases.")     
 
def create_lines_vert(canvas):
    scale = 480/9
    for i in range(0, 10):
        if (i!=4) and (i!=7) :
            canvas.create_line(i*scale, 0, i*scale, 580, width =1);
        else :
            canvas.create_line(i*scale, 0, i*scale, 580, width =3);
 
def create_lines_hor (canvas) :
    scale = 480/9
    for j in range (0, 10) :
        if (j!=4) and (j!=7) :
            canvas.create_line(0, j*scale, 580, j*scale, width = 1);
        else :
            canvas.create_line (0, j*scale, 580, j*scale, width = 3) ;
 
def create_menu(app):
 
    menu = tk.Menu(app)
 
    m = tk.Menu(menu)
    m.add_command(label="Quitter le jeu", command=app.destroy)
    menu.add_cascade (label= "Partie", menu=m)
 
    menu.add_command(label="Comment jouer", command= Comment_jouer)
    menu.add_command(label=" A propos", command = About)
 
    app['menu'] = menu
 
 
    l_case = 450/9
    h_case = 450/9
 
def click( self, event ):
      self.clickPosition( event.x, event.y )
 
      l_case = 450/9
      h_case = 450/9
 
      case_x= (event.x) / l_case
      case_y= (event.y) / h_case
 
 
      centre_case_x= (case_x - 1) * l_case + l_case /2;
      centre_case_y= (case_y -1) * h_case +h_case /2;
 
      if (case_x==0) :
          centre_case_x = l_case /2
      else :
          centre_case_x = (case_x-1)*l_case + l_case/2;
 
      if (case_y==0) :
          centre_case_y = h_case /2
      else :
          centre_case_y = (case_y -1) * h_case + h_case /2 ;
 
def ecrire (event) :
        grid.create_text ( click, fill=text_color, text='', font=canvas.font )
 
if __name__ == '__main__':
    app = tk.Tk()
    app.title(" Sudoku ")
 
    create_menu(app)
    grid = tk.Canvas(app, width=450, height=450, bg='SaddleBrown', bd = 55, relief="ridge")
    grid.pack()
    create_lines_vert(grid)
    create_lines_hor (grid)
 
 
    app.mainloop()
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2013, 21h39   #19
Pytdeb
Invité de passage
 
Inscription : février 2013
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 23
Points : 0
Points : 0
Bonsoir, je reste bloqué dans mon code, pouvez vous m'aider ? Merci.
Je ne sais pas si c'est bon, je ne vois pas de résultat.

Code :
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
def click( self, event ):
      self.clickPosition( event.x, event.y )
 
      l_case = 450/9
      h_case = 450/9
 
      case_x= (event.x) / l_case
      case_y= (event.y) / h_case
 
 
      centre_case_x= (case_x - 1) * l_case + l_case /2;
      centre_case_y= (case_y -1) * h_case +h_case /2;
 
      if (case_x==0) :
          centre_case_x = l_case /2
      else :
          centre_case_x = (case_x-1)*l_case + l_case/2;
 
      if (case_y==0) :
          centre_case_y = h_case /2
      else :
          centre_case_y = (case_y -1) * h_case + h_case /2 ;
 
def ecrire (event) :
        grid.create_text ( click, fill=text_color, text='', font=canvas.font )
Pytdeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2013, 21h44   #20
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 696
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 696
Points : 4 525
Points : 4 525
Si vous ne filez pas tout le code, pas possible de testez.
Regardez la discussion, vous n'êtes pas le seul à coder du sudoku.
En plus votre collègue a de bonnes idées: essayez d'en profiter.
- W
__________________
Architectures Post-Modernes
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h17.


 
 
 
 
Partenaires

Hébergement Web