Как открыть файл .gif с помощью tkinter без ошибки «Слишком рано для создания изображения»?

Я не могу запустить свою программу 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")

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

Display a frame that contains nine labels. A label may display an image icon for X or an image icon for O, as shown in Figure 12.27c. What to display is randomly decided.

Use the Math.random() method to generate an integer 0 or 1, which corresponds to displaying an X or O image icon. These images are in the files x.gif and o.gif.

вы упомянули два разных сообщения об ошибках. Какая у тебя проблема?

furas 28.04.2019 08:36

Чтобы использовать PhotoImage, вам, возможно, придется сначала создать главное окно Tk(). И Too early to create image может означает, что вы используете PhotoImage перед созданием Tk()

furas 28.04.2019 08:37

Если у вас ошибка “no such file or directory”, попробуйте "/full/path/to/image/X.gif"

furas 28.04.2019 08:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу из кода, который вы используете 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()

Другие вопросы по теме