"La classe d'introduction Python la plus simple" modifiée

Correction de texte

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).

Modification de example07-08-01.py (version tag)

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.

Plus orthodoxe (version obj)

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

  1. Essayez de résoudre le problème comme ci-dessus
  2. Je me fâche si je n'ai pas self.ball, alors fais-le avec init
  3. Je suis en colère sans toile, alors apportez-la avant de générer des balles 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

"La classe d'introduction Python la plus simple" modifiée
Examiner la classe d'un objet avec python
"Kanrika" la classe python
classe python, instance
Les bases de #Python (classe)
Essayez de résoudre le problème de l'héritage de classe Python
Python: préparez un sérialiseur pour l'instance de classe:
Le moyen le plus simple d'utiliser OpenCV avec python
classe wrapper python syslog
classe de cas en python
Connaissez l'emplacement du fichier de définition de classe Python.
[Python] Héritage de classe (super)
Tri par classe Python
[python] méthode de base de la classe
le zen de Python
Implémentation python de la classe de régression linéaire bayésienne
[Python] Héritage de classe, remplacement
classe de wrapper de sous-processus python
[Python] Fractionner la date
Pourquoi le premier argument de la classe [Python] est-il self?
Classe wrapper YOLO Python
Notation de classe en Python
Liste des classes d'exception Python
Comment utiliser la méthode __call__ dans la classe Python
Comment déployer Pybot, le manuel Python le plus simple, sur Heroku
[Python] Qui est exécuté en premier, variable de classe ou __init__?
python3 Mesurez la vitesse de traitement.
Python: variables de classe et d'instance
Vers la retraite de Python2
Trouver des erreurs en Python
Un programmeur C / C ++ défie Python (édition de classe)
Comparons les types de tableaux Python
À propos du module Python venv
À propos de la fonction enumerate (python)
[Python] Ajustement de la barre de couleurs
Résumé de la portée des membres de la classe Python
[Python] Récupérez le mois précédent
Variables de classe et d'instance Python
[Python 2/3] Analyser la chaîne de format
Atelier de programmation Python - Super introduction Vol.4
Appelez l'API avec python3.
À propos des fonctionnalités de Python
[Python] Vérifiez les bibliothèques installées
J'ai téléchargé la source python
Le pouvoir des pandas: Python
Trouvez la valeur maximale python (amélioré)
Comprendre la classe python Struggle (1) Déplaçons-la pour le moment
Nouvelle grammaire et fonctionnalités Python non mentionnées dans le livre d'introduction