Python 如何使用tkinter打开.gif文件而不出现错误;“创建图像太早”吗;?

Python 如何使用tkinter打开.gif文件而不出现错误;“创建图像太早”吗;?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我无法启动Python程序。我有一个问题,我不能打开一个.gif文件,我也不知道如何打开 我一直收到一条很长的错误消息: “运行时错误:创建映像太早” 我已经将gif文件移动到与代码相同的项目文件中,我尝试在线查找,但每个人都使用不同的软件包,我就是找不到解决方法。我也在pycharm上打开了GIF 这是我的代码: import random from tkinter import * sign = random.randint(0, 1) if (sign == 1): photo

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

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

“运行时错误:创建映像太早”

我已经将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")
我的总体目标是展示一个像完成的tic-tac-toe游戏一样的图像,随机放置X和O,并且不必有任何特定的顺序,比如连续3次。以下是作业问题:

显示包含九个标签的框架。标签可显示X的图像图标或O的图像图标,如图12.27c所示。显示什么是随机决定的

使用
Math.random()
方法生成整数0或1,对应于显示X或O图像图标。这些图像位于文件x.gif和o.gif中


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

之所以有些人喜欢使用其他模块,是因为它为您提供了更大的调整大小、重塑形状、反转等灵活性。(顺便说一句,它可以从PIL导入图像,ImageTk中枕头模块

现在回到您的代码。
  • 您可以随机选择“O”和“X”图像,而无需使用
    if-else
  • 我在创建图像之前创建了主窗口
  • 确保您使用的图像位于同一目录中


  • 您提到了两条不同的erorr消息。哪一个是您的问题?要使用
    PhotoImage
    您可能必须首先创建主窗口
    Tk()
    。而
    创建图像太早
    可能意味着您在创建
    Tk()
    之前使用了
    PhotoImage
    ,如果出现错误
    “没有这样的文件或目录”
    ,请尝试
    “/full/path/to/image/X.gif”
    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()