[英]Gif crashes script when followed by input statement
如果有人贏或輸,我會嘗試在我的作業游戲中打印 gif,為此我有以下代碼:
import shutil
import pyglet
import requests
import os
def gif():
url = 'https://tenor.com/view/no-oh-no-nope-nah-not-really-gif-15162749.gif'
filename = url.split('/')[-1]
with open(filename, 'wb') as out_file:
out_file.write(requests.get(url).content)
os.rename('no-oh-no-nope-nah-not-really-gif-15162749.gif', 'michaelscott1.gif')
animation = pyglet.image.load_animation('michaelscott1.gif')
animSprite = pyglet.sprite.Sprite(animation)
w = animSprite.width
h = animSprite.height
window = pyglet.window.Window(width=w, height=h)
@window.event
def on_draw():
window.clear()
animSprite.draw()
pyglet.app.run()
gif()
如果我運行它,它會顯示 gif,當我關閉它時,程序以退出代碼 0 結束。
如果我在它后面放一個打印語句,它會顯示 gif,打印打印件,然后以退出代碼 0 結束。
但是如果我嘗試在 gif 之后做一個輸入語句
input('>')
顯示 gif 的 python 窗口崩潰。 當我強制關閉它時,腳本退出,我得到這個返回語句:
Process finished with exit code 143 (interrupted by signal 15: SIGTERM)
解決這個問題的方法是什么?
假設您切換到 Python3 (您應該這樣做) ,事情可能會開始好一點。 如果對代碼沒有其他改進,那么除非您確實需要,否則不要將圖像存儲在磁盤上。
您可以通過使用io.BytesIO
並從內存中加載圖像來規避此問題:
import pyglet
import os
import urllib.request, io
def url_to_sprite(url):
with urllib.request.urlopen(url) as response:
image_data = response.read()
image = pyglet.image.load_animation(os.path.basename(url), file=io.BytesIO(image_data))
return pyglet.sprite.Sprite(image)
animSprite = url_to_sprite('https://media.giphy.com/media/13gvXfEVlxQjDO/giphy.gif')
input('>')
window = pyglet.window.Window(width=animSprite.width, height=animSprite.height)
@window.event
def on_draw():
window.clear()
animSprite.draw()
pyglet.app.run()
我無法使用此代碼重現任何錯誤。 使用輸入時沒有任何崩潰。
但是,在輸入完成之前,程序不會渲染任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.