J'ai recommandé les exercices dans "La classe d'introduction Python la plus simple" [^ 1]. Ce texte explique soigneusement comment chaque code s'y trouve. C'est donc un très bon texte que les débutants doivent lire attentivement pour comprendre le codage. Cependant, il existe quelques écarts par rapport à la sagesse commune du codage, probablement parce qu'il met l'accent sur le flux de la logique. C'est la correction.
[^ 1]: "La classe d'introduction Python la plus simple" par Fumitaka Osawa, (Sotec Publishing, 2017).
Le code ici est mauvais.
Si vous le faites pendant longtemps ou si vous en faites beaucoup, vous pourrez en profiter. Au début, j'ai abandonné à cause du processeur, mais c'était trop tard. .. ..
J'avais une idée de solution quelque part, mais je l'ai corrigée il y a longtemps, donc je ne sais pas quel était l'original.
Le problème est,
example07-08-01.py
canvas.create_oval(self.x - 20, self.y - 20,
self.x + 20, self.y + 20, fill="white", width=0)
est. Je l'ai écrasé par «blanc» et je l'ai effacé. C'est la manière habituelle de dessiner une image avec du code. Il est efficace lors de l'écriture en gérant tout l'écran comme une image. Cependant, si vous faites cela pour un objet, l'objet proliférera de plus en plus. En conséquence, la mémoire requise augmente et le dessin devient lent. peut être
Pourquoi supprimer l'objet correctement.
Tout d'abord, créez avec une balise pour l'identification avec create_oval.
canvas.create_oval(self.x - 20, self.y - 20,
self.x + 20, self.y + 20,
fill=self.color, width=0,
tag=self.color)
Au lieu de l'écraser par «blanc», supprimez-le comme suit.
canvas.delete(self.color)
Veuillez essayer ceci. Cela devrait être très rapide.
Cependant, la forme peut sembler déformée dans les fenêtres. Cela semble être dû à la bibliothèque de dessins. C'est parfait pour la version mac.
De plus, l'idée d'effacer l'objet semble être meilleure que de l'identifier avec une balise.
Fondamentalement,
canvas.delete(self.ball)
...Omission...
self.ball = canvas.create_oval(self.x - 20, self.y - 20,
self.x + 20, self.y + 20,
fill=self.color, width=0)
Faites-en un objet appelé self.ball et supprimez-le. Cependant, à partir du texte original, il est nécessaire de changer considérablement l'ordre des codes.
Je vais ajouter un formulaire rempli, donc si vous avez le temps, veuillez vous inquiéter de ce qui se passe. L'ordre est
import tkinter as tk
speed = 10
class Ball:
global speed
def __init__(self, x, y, dx, dy, color):
self.x = x
self.y = y
self.dx = dx
self.dy = dy
self.color = color
self.ball = canvas.create_oval(self.x - 20, self.y - 20,
self.x + 20, self.y + 20,
fill=self.color, width=0)
def test(self):
print(self.x)
print(self.y)
def move(self, canvas):
canvas.delete(self.ball)
self.x = self.x + self.dx
self.y = self.y + self.dy
self.ball = canvas.create_oval(self.x - 20, self.y - 20,
self.x + 20, self.y + 20,
fill=self.color, width=0)
if self.x >= canvas.winfo_width():
self.dx = -speed
if self.x < 0:
self.dx = +speed
if self.y >= canvas.winfo_height():
self.dy = -speed
if self.y < 0:
self.dy = +speed
root = tk.Tk()
root.geometry("600x400")
canvas = tk.Canvas(root, width=600, height=400, bg="white")
canvas.place(x=0, y=0)
balls = [
Ball(300, 400, 1, 1, "red"),
Ball(200, 400, 2, 1, "green"),
Ball(300, 200, 1, 2, "blue")
]
def loop():
for b in balls:
b.move(canvas)
root.after(10, loop)
root.after(10, loop)
root.mainloop()
Recommended Posts