python - 如何使用 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 文件中。
解决方案
我可以从您PhotoImage
在创建主窗口之前使用的代码中看到Runtime error
,它会在错误中明确指出“创建图像太早”Tk
意味着如果没有活动窗口则无法创建图像。
有些人喜欢使用其他模块的原因是因为它为您提供了更大的灵活性来调整大小、重塑、反转等等。(顺便说一句,它可以枕头模块from PIL import Image, ImageTk
如何在 Tkinter 中使用 PIL)。
现在回到你的代码。
- 您甚至可以在不使用
if-else
. - 我在创建图像之前创建了主窗口。
- 确保您使用的图像位于同一目录中。
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()
推荐阅读
- rust - 如何在 Rust 中使用来自 web_sys 的 WebGL 扩展
- python - 如何在纯 Django 模板中处理图像,以便它们像在 Wagtail 中一样工作
- angular - 如何动态修改角度分量输入值
- windows-installer - 带有 GUI 安装程序的 InstallShield 安装程序错误 2006
- mfc - 使用 MFC 在不更改 GUI 的情况下动态读取卫星 DLL
- html - CSS 响应式布局
- r - 将 model$finalModel$formula 应用于新模型?
- unity3d - 统一游戏对象的宽度和高度
- java - 如何在不将整个文件读入 RAM 的情况下逐行读取文件
- javascript - 如何使用 id mongodb 在嵌入式文档数组中查找数据?