[3.12] [3.13] gh-123370: Fix the canvas not clearing after running turtledemo.clock (gh-123457) (GH-125653) (#125656)

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.
(cherry picked from commit c124577ebe)

(cherry picked from commit 30d7e9e721)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Co-authored-by: Wulian <xiguawulian@gmail.com>
This commit is contained in:
Miss Islington (bot) 2024-10-17 19:09:05 +02:00 committed by GitHub
parent dc0a176321
commit 5e62d9bd54
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 13 deletions

View file

@ -1,8 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: cp1252 -*-
""" turtle-example-suite: """ turtle-example-suite:
tdemo_clock.py turtledemo/clock.py
Enhanced clock-program, showing date Enhanced clock-program, showing date
and time and time
@ -13,6 +12,9 @@ and time
from turtle import * from turtle import *
from datetime import datetime from datetime import datetime
dtfont = "TkFixedFont", 14, "bold"
current_day = None
def jump(distanz, winkel=0): def jump(distanz, winkel=0):
penup() penup()
right(winkel) right(winkel)
@ -53,11 +55,23 @@ def clockface(radius):
jump(-radius) jump(-radius)
rt(6) 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(): def setup():
global second_hand, minute_hand, hour_hand, writer global second_hand, minute_hand, hour_hand, writer
mode("logo") mode("logo")
make_hand_shape("second_hand", 125, 25) 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) make_hand_shape("hour_hand", 90, 25)
clockface(160) clockface(160)
second_hand = Turtle() second_hand = Turtle()
@ -75,10 +89,10 @@ def setup():
hand.speed(0) hand.speed(0)
ht() ht()
writer = Turtle() writer = Turtle()
#writer.mode("logo")
writer.ht() writer.ht()
writer.pu() writer.pu()
writer.bk(85) writer.bk(85)
display_date_time()
def wochentag(t): def wochentag(t):
wochentag = ["Monday", "Tuesday", "Wednesday", wochentag = ["Monday", "Tuesday", "Wednesday",
@ -100,18 +114,11 @@ def tick():
stunde = t.hour + minute/60.0 stunde = t.hour + minute/60.0
try: try:
tracer(False) # Terminator can occur here 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 second_hand.setheading(6*sekunde) # or here
minute_hand.setheading(6*minute) minute_hand.setheading(6*minute)
hour_hand.setheading(30*stunde) hour_hand.setheading(30*stunde)
if t.day != current_day:
display_date_time()
tracer(True) tracer(True)
ontimer(tick, 100) ontimer(tick, 100)
except Terminator: except Terminator:

View file

@ -0,0 +1 @@
Fix the canvas not clearing after running turtledemo clock.