首页 > 解决方案 > 如何使用 tkinter 打开 .gif 文件而不会出现错误“创建图像太早”?

问题描述

我无法启动我的 Python 程序。我有一个问题,我无法打开 .gif 文件,而且我不知道如何打开!

我不断收到一条很长的错误消息:

"RuntimeError: Too early to create image"

我已将 gif 文件移动到与代码相同的项目文件中,并尝试在网上查找,但每个人都使用不同的包,我只是找不到解决方法。我还在 pycharm 上打开了 gif。

这是我的代码:

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 文件中。

标签: pythonpython-3.xtkinter

解决方案


我可以从您PhotoImage在创建主窗口之前使用的代码中看到Runtime error,它会在错误中明确指出“创建图像太早”Tk意味着如果没有活动窗口则无法创建图像。

有些人喜欢使用其他模块的原因是因为它为您提供了更大的灵活性来调整大小、重塑、反转等等。(顺便说一句,它可以枕头模块from PIL import Image, ImageTk 如何在 Tkinter 中使用 PIL)。

现在回到你的代码。

  1. 您甚至可以在不使用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()

推荐阅读