Posté le 14/02/2016 18:23
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 190 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 03/12/2016 10:33 | #
En fait, la vraie erreur se trouve à ce niveau :
Quand tu fais cette assignation, Python ne copie pas tout l'objet à un nouvel emplacement de la mémoire, il lie tout simplement le nom self.foret au contenu foret_2.foret.
C'est pour ça que quand tu modifie self.foret, tu modifie foret_2.foret.
Pour faire une deep copy d'une liste (c'est à dire copier toute la liste, récursivement, vers une nouvelle variable, donc exactement ce que tu veux), tu peux utiliser la fonction deepcopy du module copy (qui est un module standard Python).
Si ce n'était pas des listes imbriquées, tu aurais pu faire une shallow copy, c'est à dire copier superficiellement le contenu de la liste (on ne peut pas utiliser ce type de copie dans ce cas, parce que les listes dans la liste auraient été copiées uniquement par référence, et donc le problème n'aurait pas été résolu), de cette manière :
(À noter que ça ne marche que pour les listes, puisqu'on fait un slice. Pour faire une shallow copy d'un objet autre qu'une liste, il y a la fonction copy du module copy)
Citer : Posté le 03/12/2016 12:42 | #
Ok merci beaucoup !
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 11/12/2016 14:09 | #
Moi aussi j'ai quelques questions, pour mon mastermind en python
J'aurais besoin de :
- Ouvrir une fenêtre de taille x*y, non redimensionnable
- Afficher une image et la mettre en fond (le jeu)
- Afficher des sprites à des coordonnées spécifiques, les sprites doivent être au dessus de l'image de fond (les pions)
- Lorsque l'utilisateur clique sur un sprite (ou à des coordonnées spécifiques vu que les pions ils bougent pas) ça exécute une fonction
Le résultat ressemblerait à ça :
Lorsque l'utilisateur clique sur les pions à droite ça les met dans la ligne.
Du coup quelles sont les fonctions pour faire ça ? (je pense que la fenêtre et l'image/sprite je trouverai assez vite, mais faire une action quand l'utilisateur clique sur un pion ça risque d'être compliqué)
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 11/12/2016 14:11 | #
Mais euh c'est un cas flagrant de RTFM.
Lis n'importe quel tuto sur Tkinter ou PyQt.
Citer : Posté le 19/12/2016 15:07 | #
ou pygtk, ou python-efl, ou tout toolkit graphique digne de ce nom, qui te permettra généralement d’appeler une fonction de callback sur une action de l’utilisateur (comme un appui sur une touche)
Sinon, il y a pygame
Coïncidence ? Je ne pense pas.
Citer : Posté le 10/02/2017 12:10 | #
Bonjour
Je ne comprends pas cette erreur :
File "C:\Users\f.coupey\Desktop\Julia_zoom.pyw", line 9, in <module>
c = [tkinter.IntVar(), tkinter.IntVar()]
File "C:\Users\f.coupey\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 499, in __init__
Variable.__init__(self, master, value, name)
File "C:\Users\f.coupey\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 314, in __init__
self._root = master._root()
AttributeError: 'NoneType' object has no attribute '_root'
Voici le code :
import math
global centre, zoom, taille, max_itineration, c
centre = [0,0]
zoom = 2
taille =200
max_itineration = 50
c = [tkinter.IntVar(), tkinter.IntVar()]
print(c)
c[0].set(0)
c[1].set(0)
print(c)
print(c[0].get(), c[1].get())
def clic(event) :
global centre, zoom, taille
centre = [centre[0]-zoom+event.x*((centre[0]+zoom-(centre[0]-zoom))/taille), centre[1]-zoom+event.y*((centre[1]+zoom-(centre[1]-zoom))/taille)]
def zoom_avant() :
global zoom, max_itineration
max_itineration = max_itineration * 2
zoom = zoom / 2
image()
def zoom_arriere() :
global zoom, max_itineration
max_itineration = max_itineration / 2
zoom = zoom * 2
image()
def image() :
global centre, zoom, taille, max_itineration, c
for y in range(taille) :
for x in range(taille):
a = centre[0]-zoom+x*((centre[0]+zoom-(centre[0]-zoom))/taille)
b = centre[1]-zoom+y*((centre[1]+zoom-(centre[1]-zoom))/taille)
i = 1
while i < max_itineration and a**2+b**2 < 4 :
a_ = a**2-b**2+c[0]
b = 2*a*b+c[1]
a = a_
i+=1
couleur = int(math.sqrt(i/max_itineration)*250)
if i == max_itineration :
couleur = 0
canevas.create_line(x, y, x+1, y+1, fill=('#%02x%02x%02x' % (0, couleur, 0)))
fenetre = tkinter.Tk()
fenetre.title("Ensemble de Mandelbrot.tiff")
fenetre.geometry("212x313")
fenetre["bg"] = "blue"
canevas = tkinter.Canvas(fenetre, width=taille-2, height=taille-2, bg='white')
canevas.grid(row=0, column=0, columnspan=2, padx=5, pady=5)
canevas.bind('<Button-1>', clic)
canevas.focus_set()
tkinter.Button(fenetre, text="Zoom avant", fg="blue", width=10, height=1, command=zoom_avant).grid(row=1, column=0, padx=5, pady=5)
tkinter.Button(fenetre, text="Zoom arrière", fg="blue", width=10, height=1, command=zoom_arriere).grid(row=1, column=1, padx=5, pady=5)
tkinter.Button(fenetre, text="Valider", fg="blue", width=10, height=1, command=image).grid(row=3, column=0, columnspan=2, padx=5, pady=5)
tkinter.Spinbox(fenetre, textvariable=c[0], from_=-2, to=2, increment=0.01, width=10, height=1).grid(row=2, column=0, padx=5, pady=5)
tkinter.Spinbox(fenetre, textvariable=c[1], from_=-2, to=2, increment=0.01, width=10, height=1).grid(row=2, column=1, padx=5, pady=5)
image()
fenetre.mainloop()
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 10/02/2017 12:22 | #
Tu es sûr que tu ne rates pas une étape d'initialisation ? (je ne connais pas tkinter, mais si une variable interne est None...)
Mon blog ⋅ Mes autres projets
Citer : Posté le 10/02/2017 13:05 | #
Non je crois pas.
J'ai essayer de différentes manière :
cb = tkinter.IntVar()
c = [ca, cb]
Mais j'ai toujours la même erreur.
Labyrinthe : un jeu de réflexe unique, élu Jeu Du Mois !!!
Citer : Posté le 10/02/2017 13:40 | #
De mémoire il faut que tu passes un « parent » (appelé root par Tkinter) au constructeur de IntVar(). La doc sera sans doute plus précise que moi.