簡體   English   中英

后跟輸入語句時,Gif 使腳本崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM