"Die einfachste Python-Einführungsklasse" geändert

Textkorrektur

Ich habe die Übungen in "Die einfachste Python-Einführungsklasse" [^ 1] empfohlen. In diesem Text wird sorgfältig erläutert, wie sich die einzelnen Codes dort befinden. Daher ist es ein sehr guter Text für Anfänger, ihn sorgfältig zu lesen, um die Codierung zu verstehen. Es gibt jedoch einige Abweichungen von der allgemeinen Weisheit der Codierung, wahrscheinlich weil sie den Fluss der Logik betont. Dies ist die Korrektur.

[^ 1]: "Die einfachste Python-Einführungsklasse" von Fumitaka Osawa (Sotec Publishing, 2017).

Änderung von example07-08-01.py (Tag-Version)

Der Code hier ist schlecht.

Wenn Sie es für eine lange Zeit tun oder viel tun, werden Sie es genießen können. Zuerst habe ich wegen CPU aufgegeben, aber es war zu spät. .. ..

Ich hatte irgendwo eine Idee für eine Lösung, aber ich habe sie vor langer Zeit behoben, daher weiß ich nicht, was das Original war.

Das Problem ist,

example07-08-01.py


    canvas.create_oval(self.x - 20, self.y - 20,
    self.x + 20, self.y + 20, fill="white", width=0)

ist. Ich habe es mit "Weiß" überschrieben und gelöscht. Dies ist die übliche Art, ein Bild mit Code zu zeichnen. Es ist effizient beim Schreiben, indem der gesamte Bildschirm als Bild verwaltet wird. Wenn Sie dies jedoch für ein Objekt tun, wird sich das Objekt immer mehr vermehren. Infolgedessen erhöht sich der erforderliche Speicher und das Zeichnen wird träge. vielleicht

Warum Objekt richtig löschen.

Erstellen Sie zunächst ein Tag zur Identifizierung mit 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)

Anstatt es mit "Weiß" zu überschreiben, löschen Sie es wie folgt.

    canvas.delete(self.color)

Bitte versuchen Sie dies. Es sollte sehr schnell gehen.

In Fenstern kann die Form jedoch verzerrt erscheinen. Dies scheint an der Zeichnungsbibliothek zu liegen. Es ist perfekt für die Mac-Version.

Weitere orthodoxe (obj Version)

Darüber hinaus scheint die Idee, das Objekt zu löschen, besser zu sein, als es mit einem Tag zu identifizieren.

Grundsätzlich,

    canvas.delete(self.ball)
    ...Unterlassung...
    self.ball = canvas.create_oval(self.x - 20, self.y - 20,
                       self.x + 20, self.y + 20, 
                       fill=self.color, width=0)

Machen Sie es einfach zu einem Objekt namens self.ball und löschen Sie es. Gegenüber dem Originaltext ist es jedoch erforderlich, die Reihenfolge der Codes erheblich zu ändern.

Ich werde ein ausgefülltes Formular hinzufügen. Wenn Sie also Zeit haben, machen Sie sich bitte Gedanken darüber, was los ist. Die Reihenfolge ist

  1. Versuchen Sie, das Problem wie oben zu beheben
  2. Ich werde wütend, wenn ich keinen self.ball habe, also mach es mit init
  3. Ich bin wütend ohne Leinwand, also bring es mit, bevor du Bälle generierst ist.
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

"Die einfachste Python-Einführungsklasse" geändert
Untersuchen Sie die Klasse eines Objekts mit Python
"Kanrika" die Python-Klasse
Python-Klasse, Instanz
# Python-Grundlagen (Klasse)
Versuchen Sie, das Problem der Python-Klassenvererbung zu lösen
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
Der einfachste Weg, OpenCV mit Python zu verwenden
Python-Syslog-Wrapper-Klasse
Fallklasse in Python
Kennen Sie den Speicherort der Python-Klassendefinitionsdatei.
[Python] Klassenvererbung (super)
Python selbst erstellte Klassensortierung
Grundmethode der [Python] -Klasse
der Zen von Python
Python-Implementierung der Bayes'schen linearen Regressionsklasse
[Python] Klassenvererbung, überschreiben
Python-Subprozess-Wrapper-Klasse
[Python] Teilen Sie das Datum
Warum ist das erste Argument der [Python] -Klasse selbst?
YOLO Python-Wrapper-Klasse
Klassennotation in Python
Liste der Python-Ausnahmeklassen
Verwendung der Methode __call__ in der Python-Klasse
So stellen Sie Pybot, das einfachste Python-Lehrbuch, auf Heroku bereit
[Python] Was wird zuerst ausgeführt, Klassenvariable oder __init__?
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Python: Klassen- und Instanzvariablen
Auf dem Weg zum Ruhestand von Python2
Finde Fehler in Python
C / C ++ - Programmierer fordert Python heraus (Class Edition)
Vergleichen wir die Python-Array-ähnlichen Typen
Über das Python-Modul venv
Über die Aufzählungsfunktion (Python)
[Python] Anpassen der Farbleiste
Zusammenfassung des Bereichs der Python-Klassenmitglieder
[Python] Holen Sie sich den Vormonat
Python-Klassen- und Instanzvariablen
[Python 2/3] Analysiert die Formatzeichenfolge
Python Programming Workshop - Super Einführung Vol.4
Rufen Sie die API mit python3 auf.
Über die Funktionen von Python
[Python] Überprüfen Sie die installierten Bibliotheken
Ich habe die Python-Quelle heruntergeladen
Die Kraft der Pandas: Python
Finden Sie den Maximalwert Python (verbessert)
Grundlegendes zur Python-Klasse Kampf (1) Verschieben wir sie vorerst
Neue Python-Grammatik und Funktionen, die im Einführungsbuch nicht erwähnt werden