Как открыть файл .gif, используя tkinter, не получая ошибку «Слишком рано для создания изображения»? - PullRequest
2 голосов
/ 28 апреля 2019

Я не могу запустить свою программу на Python. У меня проблема с тем, что я не могу открыть файл .gif, и я не могу понять, как!

Я получаю длинное сообщение об ошибке:

"RuntimeError: Too early to create image"

Я переместил файлы gif в тот же файл проекта, что и код, и попытался посмотреть в Интернете, но все используют разные пакеты, и я просто не могу найти способ обойти это. У меня также есть открытые картинки на pycharm.

Вот мой код:

import random
from tkinter import *


sign = random.randint(0, 1)

if (sign == 1):
   photo = PhotoImage(file="X.gif")
else:
    photo = PhotoImage(file="O.gif")

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

Показать кадр, который содержит девять меток. Метка может отображать значок изображения для X или значок изображения для O, как показано на рисунке 12.27c. Что отображать, определяется случайным образом.

Используйте метод Math.random() для генерации целого числа 0 или 1, которое соответствует отображению значка изображения X или O. Эти изображения находятся в файлах x.gif и o.gif.

1 Ответ

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

Я могу видеть из кода, который вы используете PhotoImage, прежде чем создавать главное окно, вы получите Runtime error, и в ошибке ясно сказано: "Слишком рано для создания изображения" означает, что изображение не может быть создано, если нет активного Tk окна.

Причина, по которой некоторые люди предпочитают использовать другой модуль, потому что он дает вам больше гибкости для изменения размера, изменения формы, инвертирования и многого другого. (Кстати, это может Подушка Модуль from PIL import Image, ImageTk Как использовать PIL в Tkinter ).

Теперь вернемся к вашему коду.

  1. Вы можете рандомизировать изображения "O" и "X", даже не используя if-else.
  2. Я создал главное окно перед созданием изображения.
  3. Убедитесь, что используемые вами изображения находятся в одном каталоге.

import random
from tkinter import *

sign = random.choice( ["X.gif", "O.gif"] )

print(sign,"photo has been selected")

root = Tk()

Photo = PhotoImage(file=sign)

display_photo = Label(root, image=Photo)
display_photo.pack()

mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...