]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-123370: Fix the canvas not clearing after running turtledemo.clock (#123457)
authorWulian <xiguawulian@gmail.com>
Thu, 17 Oct 2024 15:23:37 +0000 (23:23 +0800)
committerGitHub <noreply@github.com>
Thu, 17 Oct 2024 15:23:37 +0000 (11:23 -0400)
Rewriting the day and date every tick somehow prevented them from being removed either by clicking STOP or loading another example.  The solution is to rewrite them only when they change.

Lib/turtledemo/clock.py
Misc/NEWS.d/next/Library/2024-08-28-19-27-35.gh-issue-123370.SPZ9Ux.rst [new file with mode: 0644]

index fd3b3992d466bf1b7092b8a36e0cc016d7ff4c50..8a630e29b8da501ff92810fd251e28b259a9a120 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: cp1252 -*-
 """       turtle-example-suite:
 
-             tdemo_clock.py
+           turtledemo/clock.py
 
 Enhanced clock-program, showing date
 and time
@@ -12,6 +11,9 @@ and time
 from turtle import *
 from datetime import datetime
 
+dtfont = "TkFixedFont", 14, "bold"
+current_day = None
+
 def jump(distanz, winkel=0):
     penup()
     right(winkel)
@@ -52,11 +54,23 @@ def clockface(radius):
             jump(-radius)
         rt(6)
 
+def display_date_time():
+    global current_day
+    writer.clear()
+    now = datetime.now()
+    current_day = now.day
+    writer.home()
+    writer.forward(distance=65)
+    writer.write(wochentag(now), align="center", font=dtfont)
+    writer.back(distance=150)
+    writer.write(datum(now), align="center", font=dtfont)
+    writer.forward(distance=85)
+
 def setup():
     global second_hand, minute_hand, hour_hand, writer
     mode("logo")
     make_hand_shape("second_hand", 125, 25)
-    make_hand_shape("minute_hand",  130, 25)
+    make_hand_shape("minute_hand",  115, 25)
     make_hand_shape("hour_hand", 90, 25)
     clockface(160)
     second_hand = Turtle()
@@ -74,10 +88,10 @@ def setup():
         hand.speed(0)
     ht()
     writer = Turtle()
-    #writer.mode("logo")
     writer.ht()
     writer.pu()
     writer.bk(85)
+    display_date_time()
 
 def wochentag(t):
     wochentag = ["Monday", "Tuesday", "Wednesday",
@@ -99,18 +113,11 @@ def tick():
     stunde = t.hour + minute/60.0
     try:
         tracer(False)  # Terminator can occur here
-        writer.clear()
-        writer.home()
-        writer.forward(65)
-        writer.write(wochentag(t),
-                     align="center", font=("Courier", 14, "bold"))
-        writer.back(150)
-        writer.write(datum(t),
-                     align="center", font=("Courier", 14, "bold"))
-        writer.forward(85)
         second_hand.setheading(6*sekunde)  # or here
         minute_hand.setheading(6*minute)
         hour_hand.setheading(30*stunde)
+        if t.day != current_day:
+            display_date_time()
         tracer(True)
         ontimer(tick, 100)
     except Terminator:
diff --git a/Misc/NEWS.d/next/Library/2024-08-28-19-27-35.gh-issue-123370.SPZ9Ux.rst b/Misc/NEWS.d/next/Library/2024-08-28-19-27-35.gh-issue-123370.SPZ9Ux.rst
new file mode 100644 (file)
index 0000000..1fd5cc5
--- /dev/null
@@ -0,0 +1 @@
+Fix the canvas not clearing after running turtledemo clock.