Bonjour a tous , a partir des explications trouver sur internet , j'ai pu realiser le jeu suivant dont le code est le suivant :
# script cible.py
from tkinter import *
import random
def Cercle():
""" Dessine un cercle de centre (x,y) et de rayon r """
x = random.randint(0,Largeur)
y = random.randint(0,Hauteur)
r = 10
# on dessine un cercle dans la zone graphique
item = Canevas.create_oval(x-r, y-r, x+r, y+r, outline='black', fill='black')
# on ajoute l'item dans la liste
ListeItemCercles.append(item)
print("Création du cercle (item" , item ,")")
# affichage de tous les items de Canevas
print(Canevas.find_all())
def Undo():
""" Efface le dernier cercle"""
if ListeItemCercles != []:
item = ListeItemCercles[-1]
# on efface le cercle
Canevas.delete(item)
# on supprime l'item de la liste
del ListeItemCercles[-1]
print("Suppression du cercle (item" , item ,")")
# affichage de tous les items de Canevas
print(Canevas.find_all())
def EffacerTout():
""" Efface tous les cercles"""
while ListeItemCercles != []:
item = ListeItemCercles[-1]
# on efface le cercle
Canevas.delete(item)
# on supprime l'item de la liste
del ListeItemCercles[-1]
print("Suppression du cercle (item" , item ,")")
# affichage de tous les items de Canevas
print(Canevas.find_all())
# Initialisation de la liste des items des cercles
ListeItemCercles = []
# Création de la fenêtre principale (main window)
Mafenetre = Tk()
Mafenetre.title('Cible')
# Image de fond
photo = PhotoImage(file="tk_cible.gif")
# Création d'un widget Canvas (zone graphique)
Largeur = 400
Hauteur = 400
Canevas = Canvas(Mafenetre,width = Largeur, height =Hauteur)
item = Canevas.create_image(0,0,anchor=NW, image=photo)
print("Image de fond (item",item,")")
Canevas.pack()
# Création d'un widget Button
BoutonGo = Button(Mafenetre, text ='Tirer', command = Cercle)
BoutonGo.pack(side = LEFT, padx = 10, pady = 10)
# Création d'un widget Button
BoutonEffacer = Button(Mafenetre, text ='Effacer le dernier tir', command = Undo)
BoutonEffacer.pack(side = LEFT, padx = 10, pady = 10)
# Création d'un widget Button
BoutonEffacerTout = Button(Mafenetre, text ='Effacer tout', command = EffacerTout)
BoutonEffacerTout.pack(side = LEFT, padx = 10, pady = 10)
# Création d'un widget Button (bouton Quitter)
BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
BoutonQuitter.pack(side = LEFT, padx = 10, pady = 10)
Mafenetre.mainloop()
je n'ai pas de liens pour les images utilisee desolee , quand je fais le 1er tir une erreur est soulevée et tout le reste du script ne s'execute plus , que faire ?
Si tu veux que l'on t'aide correctement, il faudrait nous donner l'erreur renvoyé par le programme. Ensuite, ce serait bien que tu nous donnes un lien de ton image afin que l'on puisse tester.
Pourrai-tu donner l'erreur complète (avec les numéro de lignes) que tu obtient stp. Sinon ton code est plutôt bien fait. Une petite chose: tu pourrai remplacer ceci:
if ListeItemCercles != []:
while ListeItemCercles != []:
#Par cela (plus pythonnesque)
if ListeItemCercles: #Si la liste n'est pa vide
while ListeItemCercles: #Tant que la liste n'est pas vide
Image de fond (item 1 )
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
return self.func(*args)
File "C:\Users\Hacker\Desktop\TestPythonV2\jeuxdarc", line 13, in Cercle
item = Canevas.create_image()
File "C:\Python32\lib\tkinter\__init__.py", line 2182, in create_image
return self._create('image', args, kw)
File "C:\Python32\lib\tkinter\__init__.py", line 2166, in _create
cnf = args[-1]
IndexError: tuple index out of range
>>>
Pareil pour moi, ça marche bien. Mais je teste sous Linux, toi visiblement tu es sous Windows il y a peut être une différence dans l'installation de python sous Windows.
Chez moi aussi ça marche très bien ! (windows7 avec Python 3.4)
Remarque : il me semble qu'on pourrait simplifier EffacerTout en itérant dans un for :
def EffacerTout():
""" Efface tous les cercles"""
global ListeItemCercles
for item in ListeItemCercles :
# on efface le cercle
Canevas.delete(item)
ListeItemCercles = []
# affichage de tous les items de Canevas
print(Canevas.find_all())
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération