Hallo blackjack!
Erstmal danke für die sehr ausführliche Antwort.
__blackjack__ hat geschrieben: ↑Samstag 23. März 2019, 11:11
@Markus74: Das Buch scheint einige nicht so gute Praktiken zu vermitteln.
Das ist nicht so toll, als Anfänger verlässt man sich natürlich drauf, dass die abgedruckten Codes "gut" sind und vor allem auch funktionieren
So ganz grundsätzlich funktioniert GUI-Programmierung nicht so wie das da versucht wird.
Offensichtlich muss ich mich also mit Klassen und Objektorientierung auseinandersetzen, bis jetzt versteh ich da gar nichts. Hast Du einen Tipp für ein brauchbares Tutorial, am besten online?
Weitere Anmerkungen: Sternchen-Importe sind Böse™. Damit holt man sich im Fall von `tkinter` Unmengen von Namen ins Modul von denen nur ein Bruchteil verwendet wird. Man kann schwerer nachvollziehen woher welcher Name kommt, und es besteht die Gefahr von Namenskollisionen.
Versteh ich das richtig, dass man also gezielt die Funktionen importiert, die man auch tatsächlich benötigt?
Das Dir überhaupt das Ergebnis angezeigt wird, liegt daran, dass Du das aus IDLE heraus ausführst. Ohne diese IDE muss man bei tkinter-Programmen auch dafür sorgen, dass die GUI-Hauptschleife aufgerufen wird.
Ist IDLE also eher nicht empfehlenswert?
def draw_circles(canvas, count):
if count > 0:
x = randint(0, SIZE)
y = randint(0, SIZE)
diameter = randint(0, SIZE // 5)
canvas.create_oval(
x, y, x + diameter, y + diameter, fill=choice(COLORS)
)
canvas.after(DELAY, draw_circles, canvas, count - 1)
Bis auf die after-Anweisung ist mir das klar. Diese wartet DELAY ms und ruft dann wieder die Funktion draw_circles auf, wobei sie count um 1 reduziert. Hab ich das richtig verstanden?
root.mainloop()
Diese Anweisung hab ich jetzt schon ein paar Mal in Programmen gesehen, aber was macht die genau?
if __name__ == '__main__':
main()
Dieser kleine Teil ist das eigentliche Hauptprogramm, oder? Ich versteh die Bedingung der if-Anweisung leider nicht, was prüft die genau?
Technisch finde ich an dem Programm nicht so schön das die Anzeige etwas ”unsymmetrisch” ist – es gibt keinen Kreis der links oder oben aus dem Canvas heraus ragt, aber ganz viele die das rechts oder unten tun. Schöner fände ich ja wenn man den Mittelpunkt der Kreise über die ganze Canvasfläche verteilt zufällig wählen würde und nicht die obere linke Ecke der „bounding box“ der Kreise.
Da geb ich Dir recht
Mit den ästhetischen Problemen wart ich aber, bis ich das Handwerkzeug beherrsche
Danke jedenfalls für die Erklärungen, Markus