|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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 :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : décembre 2006 Messages : 2 197 ![]() |
Un peu trop kuku le titre...
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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. |
|
|
00
|
|
|
#5 | ||||
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
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) Ca déroule: Code :
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 :
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 |
||||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
Salut,
De quelle fonction parles-tu? - W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
Je ne sais pas si c'est une fonction mais quand t'utilises self.bind. Même ceux avec les self.
|
|
|
00
|
|
|
#9 | ||||||||
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
Reprenez votre code initial:
Code :
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 :
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 :
Code :
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 |
||||||||
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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 :
|
||
|
|
00
|
|
|
#11 | |||
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
Salut,
Citation:
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 :
Vous êtes intéressé au premier chef par la lisibilité du code que vous mettez au point: à vous de voir. - W
__________________
Architectures Post-Modernes |
|||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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 ! |
|
|
00
|
|
|
#13 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
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:
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 |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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 ? |
|
|
00
|
|
|
#15 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
Citation:
- W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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
|
|
|
00
|
|
|
#17 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
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:
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 |
|
|
|
00
|
|
|
#18 | ||
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
Voilà, j'ai essayé sa mais je ne sais pas comment faire pour rendre sélectionnable la case.
Code :
|
||
|
|
00
|
|
|
#19 | ||
|
Invité de passage
![]() Inscription : février 2013 Messages : 23 ![]() |
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 :
|
||
|
|
00
|
|
|
#20 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
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 |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com