Ligne 54; cnv.tag_bind("p1","",personnage1.clic(50)) la fonction est appelée immédiatement avec un seul paramètre alors qu'elle en attend 2.
Après si la logique est:
MoBo4 a écrit:
je voudrais que dès que je clic sur un personnage celui-ci se déplace au centre et dès que je reclic dessus le personnage revient à sa position initiale
Déjà il faut savoir si le personnage est au centre ou a sa position initiale pour passer de l'une à l'autre => 2 jeux de coordonnées et un indicateur pour savoir à quelle position le déplacer.
ça me met déplace tjr le perso dès que je lance le programme et non au clic, je pense il manque une méthode avec la valeur <Button-1> mais jsp c'est quoi le problème
mps a écrit:
Ligne 54; cnv.tag_bind("p1","",personnage1.clic(50)) la fonction est appelée immédiatement [...]
persos = [PhotoImage(file=f"personnage/p{i}.gif") for i in range(1, 9)]
Si on veut faire de la POO, on prend tout le package et dans ce cas, la méthode clic n'exprime pas l'action du personnage, mais de l'utilisateur, on aurait pu s'imaginer une méthode nommée move_to_center_or_start_position avec une méthode move_to_center et move_to_start par exemple...
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Un Canvas c'est un objet abstrait représentant un grand tableau noir, mais toi ce que tu veux c'est représenter une jungle, une ville, une cité, ... et là eh bien, on représente en code,
class Jungle(Canvas):
def __init__(self):
super().__init__(self)
self.output_pos_x = ...
def add_personage(self, perso):
self.check_position(perso) # à implémenter
# suite
bref je t'écrirai un roman... mais c'est ton histoire, et je ne sais pas comment tu déplaces tes persos, je ne sais pas de quelle manière ils avancent, ni ce qui se passe si ils sortent de la jungle... pour raconter son histoire, il faut avant tout là créer et être au clair avec acteurs, actions, ....
- Edité par fred1599 15 mai 2022 à 21:12:27
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Eh bien on t'as donné des solutions, faut les tester maintenant... La seule chose sur laquelle je reviens, c'est sur la manière dont tu veux créer ton application, c'est à dire en faisant de la POO. C'est une manière complexe, et difficile à appréhender pour le débutant... c'est pour cela que je te guide sur cette partie.
Maintenant, ça ne tiendrait qu'à moi, fait le tri dans ta tête, boit un café, dessine et représente. C'est pas compliqué pour beaucoup ici qui t'aident, mais ça demande un travail avec des pré-requis que tu n'as peut-être pas, et le fait de le faire à ta place t'avanceras pas plus à mon avis.
Et surtout ça se fait sans POO rapidement !
EDIT:
Petit exemple rapide,
from tkinter import (
Tk,
Canvas,
)
CENTER = [317.5, 237.5, 322.5, 242.5]
def click(event):
index = event.x//8
if 0 < index <= 7:
item = canvas.itemcget(f"p{index+1}", "tag")
else:
item = items_in_center.pop()
tag = item.split()[0]
coords = canvas.coords(tag)
if coords == CENTER:
canvas.coords(tag, *coords_in_center.pop())
else:
canvas.coords(tag, *CENTER)
items_in_center.append(item)
coords_in_center.append(coords)
root = Tk()
canvas = Canvas(root, width=640, height=480)
canvas.pack()
items_in_center = []
coords_in_center = []
x = 1
for i in range(8):
tag = f"p{i+1}"
canvas.create_oval(x, 237.5, x+5, 242.5, fill="red", tags=tag)
canvas.tag_bind(tag, "<Button>", click)
x += 8
root.mainloop()
On peut sûrement encore l'améliorer mais à cette heure ci j'ai la flemme
- Edité par fred1599 15 mai 2022 à 23:47:02
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
problème clic tkinter POO
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)