Python, повторяющий запрос urllib - PullRequest
0 голосов
/ 03 июля 2019

У меня есть эта глупая программа, которая извлекает изображение случайного кота и воспроизводит мяу:

import urllib.request
import turtle
import time
import playsound

screen = turtle.Screen()

url = 'https://cataas.com/cat/gif'
filename = "random-cat.gif"
urllib.request.urlretrieve(url, filename)

screen.bgpic('random-cat.gif')

playsound.playsound('meow.mp3', True)

turtle.done()

Однако, если я хочу повторить код в цикле с задержкой по времени, изображение не 'т дисплей вообще:

screen = turtle.Screen()

while True:
    url = 'https://cataas.com/cat/gif'
    filename = "random-cat.gif"
    urllib.request.urlretrieve(url, filename)

    screen.bgpic('random-cat.gif')

    playsound.playsound('meow.mp3', True)

    time.sleep(5)

turtle.done()

Может кто-нибудь объяснить, пожалуйста, почему это и как это исправить?Я думаю, это может быть связано с тем, как time.sleep() работает.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Я проверил это (кроме звука) и обнаружил проблему - черепаха кэширует изображения, поэтому использование того же имени файла с новым изображением не будет работать!Мы можем исправить это с помощью кода, чтобы переименовать файл после загрузки со счетчиком, а также очистить файл.Или мы можем манипулировать кэшем изображений черепахи за сценой:

import urllib.request
import turtle
import playsound

url = 'https://cataas.com/cat/gif'
filename = 'random-cat.gif'
sound = 'meow.mp3'

def meow():
    urllib.request.urlretrieve(url, filename)

    if screen.bgpic() == filename:
        screen._bgpics[filename] = screen._image(filename)

    screen.bgpic(filename)

    playsound.playsound(sound, True)

    screen.ontimer(meow, 5000)

screen = turtle.Screen()

meow()

turtle.done()
0 голосов
/ 03 июля 2019

turtle.done() Никогда не вызывается, потому что вы никогда не выходите из цикла, вы должны рендерить его и после каждой итерации цикла

...