Se connecter / S'enregistrer
Votre question

[Python] Créer une instance hérité de ... create_rectangle

Tags :
  • Python
  • Programmation
Dernière réponse : dans Programmation
10 Juillet 2009 00:16:13

Bonjour à tous (particulièrement à Cricky qui m'aide beaucoup ces temps ci :D  )


Je suis toujours à travailler sur mon petit rpg tactic.


Alors je résume ce que je fais. D'abord je créé une instance de type Case.

class Case():

def __init__(self):

self.terrain = "brown"
self.occupee = "libre"

Il y a d'autre attribut également comme le numéro du joueur ennemi ou alliés, la hauteur...
Il y aura une instance de type Case pour chacune des cases de la carte.

Ensuite je créé un dictionnaire avec comme clef un tupple de coordonnés(ex: (3,6) pour la troisième case horizontale et 6e verticale) et comme valeur une instance de type Case)

Tout va bien, mais c'est lors de l'affichage de la carte que j'ai un dilemme.

Pour afficher la carte, j'utilise plusieurs create_rectangle dans un Canvas. Chaque create_rectangle est une case.

Comme je veux que ces cases aient des bind en fonction de certains événements (par exemple clic sur la case, passage de la souris sur une case), je dois créer une référence pour chaque create_rectangle. Mais je trouve un peu redondant d'avoir une liste de create_rectangle représentant le graphisme des cases et un dictionnaire pour représenter les propriétés des cases.

Je me suis donc dis... pourquoi ne pas créer une classe héritée de create_rectangle et leur associer les différentes propriétés des cases ensuite...

Le problème, c'est que create_rectangle n'est pas une classe mais une méthode de Canvas....

Toutefois, existerait-il une façon de contourner le problème ?

Autres pages sur : python creer instance herite create rectangle

a b L Programmation
10 Juillet 2009 20:53:18

Python permet l'héritage et l'héritage multiple, mais create_rectangle() est une méthode qui retourne un simple entier (l'identifiant de l'objet graphique).
Du coup, tu peux simplement créer un attribut dans ta classe auquel tu affectes le retour de la méthode create_rectangle().

Sinon, ce n'est pas plus mal de bien séparer l'interface du modèle de données, c'est plus simple pour faire des modifications sans tout casser, mais comme ce n'est pas un dev pro et surtout comme c'est du python, je vais pas insister.
15 Juillet 2009 23:14:00

Je ne comprend pas tout à fait ta réponse parce que je suis encore trop novice dans ce domaine, mais je te remercie :) 

Sinon, sur la même voie... je tente d'effacer le contenu d'un Canvas lors d'une mise à jour de l'affichage. Au début je me contentais de créer un rectangle blanc par dessus les anciens dessins, mais j'ai constaté que TKinter gardais les informations. En effet en déplacant le rectangle blanc à l'aide d'événement, j'ai retrouvé les create_rectangle et les create_lines en dessous :|

La méthode delete me permettrait sans doute de tout effacer, mais elle demande les id des objets graphique ou encore leur tag.

Une autre méthode, find_all(), retourne un tupple d'id d'objets d'un canvas, mais ne semble pas pouvoir être utilisé directement avec delete()

Pour info, mon canvas s'apelle can1 et j'essayais quelque chose comme

def miseajour(self):

aa = self.can1.find_all()
self.can1.delete(aa)

... qui ne marche pas ^^
16 Juillet 2009 16:14:24

J'ai trouvé. Il s'agit de self.can1.delete(ALL)

Et j'ai enfin compris ce que tu voulais dire. Chaque case aurait un attribut numero qui contiendrait un objet de type int contenant l'identifiant. En effet, je pensais que la fonction create_rectangle retournait un objet, mais en faisant un print je me suis rendu compte qu'elle retournait, comme tu le disais, qu'un simple nombre (significatif de l'ordre d'apparition de l'objet)

De plus, un petit coup d'oeil à la classe Canvas et j'ai pu trouver quelques méthodes permettant d'affecter directement l'item en connaissant son numéro.

Merci CRicky pour toujours prendre le temps de répondre à mes questions :D 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS