как создать мигающее слово в pyhton 3. Например, когда STOP мигает в стоп-сигнале - PullRequest
0 голосов
/ 14 апреля 2019

Я должен заставить слово STOP мигать или мигать в знак остановки.

Я сделал знак остановки с графикой черепахи, но не могу понять, как заставить слово перестать мигать.Это задание для моего класса.

Любая помощь будет принята с благодарностью.

Вот код, который я сделал до сих пор:

import turtle

t = turtle.Turtle()

t.color("black", "red")
t.begin_fill()
for count in range(8):
    t.forward(60)
    t.left(45)
t.forward(20)
t.end_fill()
t.color("black")
t.begin_fill()
t.right(90)
t.forward(180)
t.left(90)
t.forward(20)
t.left(90)
t.forward(180)
t.end_fill()
t.left(90)
t.forward(20)
t.color("white")
t.penup()
t.goto(-20, 40)
t.write("STOP", font=("Impact", 50))
t.goto(-30, -10)

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Исходя из этого ответа , вы можете достичь этого, создав отдельный объект Turtle для написания текста и очистки его:

# create second turtle used for blinking text
eraseable = turtle.Turtle()
eraseable.color("white")
eraseable.hideturtle()
eraseable.up()
eraseable.setposition(t.position())

То, что вы можете использовать, чтобы заставить текст мигать раз в секунду:

import time

# blink 20 times
for i in range(0,20):
    eraseable.write("STOP", font=("Impact", 50))
    time.sleep(0.5)
    eraseable.clear()
    time.sleep(0.5)

Полная демонстрация: https://repl.it/@glhr/55672932

0 голосов
/ 14 апреля 2019

Вместо того, чтобы вводить другой модуль, такой как import time, и создавать множество глобальных черепах, которые не будут собирать мусор, я бы использовал вашу существующую черепаху, как только она закончит рисование, и собственные ontimer события черепахи для оживить знак:

from turtle import Screen, Turtle

def blink_on():
    turtle.write("STOP", align="center", font=("Impact", 50))
    screen.ontimer(blink_off, 1000)

def blink_off():
    turtle.undo()
    screen.ontimer(blink_on, 1000)

turtle = Turtle()
turtle.fillcolor("red")

turtle.begin_fill()
for _ in range(8):
    turtle.forward(60)
    turtle.left(45)
turtle.end_fill()

turtle.forward(20)
turtle.right(90)

turtle.fillcolor("black")
turtle.begin_fill()
for _ in range(2):
    turtle.forward(180)
    turtle.left(90)
    turtle.forward(20)
    turtle.left(90)
turtle.end_fill()

turtle.hideturtle()
turtle.pencolor("white")
turtle.penup()
turtle.goto(30, 40)

screen = Screen()

blink_on()

screen.exitonclick()

Одно из различий между этим подходом и решением @ glhr заключается в том, что если вы закроете окно другого решения, пока оно мигает, вы получите дюжину строк сообщений об ошибках из-за несинхронизированных событий. Вы не должны получать никаких ошибок с этим решением, поскольку его мигание синхронно с циклом событий черепахи.

...