如何使用tkinter打开.gif文件而不会出现错误“创建图像为时过早”?

时间:2019-04-28 06:02:36

标签: python python-3.x tkinter

我无法启动我的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中。

1 个答案:

答案 0 :(得分:1)

在创建主窗口之前,我从代码中看到您正在使用PhotoImage,这给您一个Runtime error,并且在错误中明确指出“创建图像为时过早“ 表示如果没有活动的Tk窗口,则无法创建图像。

某些人之所以喜欢使用其他模块,是因为它给您更大的灵活性来调整大小,调整形状,反转以及更多。 (顺便说一下,它可以 Pillow 模块from PIL import Image, ImageTk How to use PIL in Tkinter)。

现在返回您的代码。

  1. 您甚至可以不使用if-else来随机化“ O”和“ X”图像。
  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()