Skip to content

Commit

Permalink
[3.13] pythongh-123370: Fix the canvas not clearing after running tur…
Browse files Browse the repository at this point in the history
…tledemo.clock (pythongh-123457) (python#125653)

[3.13] pythongh-123370: Fix the canvas not clearing after running turtledemo.clock (pythonGH-123457)

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

Co-authored-by: Wulian <xiguawulian@gmail.com>
  • Loading branch information
terryjreedy and Wulian233 authored Oct 17, 2024
1 parent 7a2db76 commit 30d7e9e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
33 changes: 20 additions & 13 deletions Lib/turtledemo/clock.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
#!/usr/bin/env python3
# -*- coding: cp1252 -*-
""" turtle-example-suite:
tdemo_clock.py
turtledemo/clock.py
Enhanced clock-program, showing date
and time
Expand All @@ -13,6 +12,9 @@
from turtle import *
from datetime import datetime

dtfont = "TkFixedFont", 14, "bold"
current_day = None

def jump(distanz, winkel=0):
penup()
right(winkel)
Expand Down Expand Up @@ -53,11 +55,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()
Expand All @@ -75,10 +89,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",
Expand All @@ -100,18 +114,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:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix the canvas not clearing after running turtledemo clock.

0 comments on commit 30d7e9e

Please sign in to comment.