- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码有效:
img = PhotoImage(file="Image.gif")
Label(root, image=img).pack()
这个方法怎么行不通?
Label(root, image=PhotoImage(file="Image.gif")).pack()
不可能将所有内容都放在一行中吗?
最佳答案
问题不在于语法,而在于垃圾收集。以您的缩写形式:
Label(root, image=PhotoImage(file="Image.gif")).pack()
指向由 PhotoImage()
返回的图像的指针永远不会被保存,因此图像会被垃圾收集并且不会显示。以较长的形式:
img = PhotoImage(file="Image.gif")
Label(root, image=img).pack()
您按住了指向图像的指针,因此一切正常。您可以通过将工作代码包装在函数中并使 img
成为该函数的本地函数来说服自己:
from tkinter import *
root = Tk()
def dummy():
img = PhotoImage(file="Image.gif")
Label(root, image=img).pack()
dummy()
mainloop()
现在,它不会再显示,因为当函数返回并且您的图像被垃圾收集时,img
就会消失。现在,返回图像并将返回值保存在变量中:
def dummy():
img = PhotoImage(file="Image.gif")
Label(root, image=img).pack()
return img
saved_ref = dummy()
你的图像又恢复正常了!常见的修复方法如下:
def dummy():
img = PhotoImage(file="Image.gif")
label = Label(root, image=img)
label.image_ref = img # make a reference that persists as long as label
label.pack()
dummy()
但是你可以看到我们已经远离单行文字了!
关于python - tkinter 和 PhotoImage 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53767332/
我对 tkinter 很陌生,我注意到当我尝试将图片作为背景添加到窗口时,它不会显示。这是代码。 from tkinter import * root = Tk() def cheese():
我有两段代码,它们都应该创建包含黑色方 block 的 test.png。第一个这样做,但第二个返回一个透明的正方形。它们的区别在于第一个左边有明显的条纹,第二个没有。 第一个例子: root = T
发现问题 今天在使用imagetk.photoimage()显示图片时,当把包含该函数放在自定义函数里时,不能正常显示,移到函数为又可正常显示,所以想到可能是变量不是全局性的缘故,改为全局变量后果
我正在尝试在我的文本小部件中显示两个图像对象。最初,这两个物体都显示为空图像。经过一番研究,我了解到我需要保留对图像的引用。我在代码中添加了一行额外的代码。我现在看到第二张图像正确显示,但第一张图像仍
from tkinter import * root = Tk() photo = PhotoImage(file='blueface.png') label = Label(root, image=
目标是将以下代码减少到尽可能少的代码行(和尽可能少的字符)。它不需要是“可读的”甚至是“pythonic”的,只要简短而甜美即可。这些更多是为了好玩。 self.BlueEgg = PhotoImag
在我正在创建的简单游戏中,我目前将占位符矩形对象作为图形。我正在尝试用 Sprite 替换它们,但据我了解,Tkinter 不支持 PNG 或 alpha 透明度。我正在使用 Python 3.3,它
我有一个 Python 3 Tkinter 程序,该程序应该从特殊文件格式渲染图像。 from tkinter import * image = [] path = Tk() display = To
我正在尝试使用 tkinter,但这段代码不起作用,我想知道是否有人知道为什么,谢谢。 from tkinter import * window = Tk() window.title("tkinte
我一直在尝试使用 PIL 调整图像大小,然后使用 Tkinter 显示它们,但程序一直在崩溃,我已将问题隔离到下面的第二行: image = Image.open("0.gif") photo = I
我正在尝试在 Mac 10.6.8 上运行以下命令: Python 2.7.2 |EPD 7.1-2 (64-bit)| (default, Jul 27 2011, 14:50:45) [GCC 4
我需要调整图像大小,但我想避免 PIL,因为我不能让它在 OS X 下工作 - 不要问我为什么...... 无论如何,因为我对 gif/pgm/ppm 很满意,所以 PhotoImage 类对我来说没
我正在尝试显示视频,并且使用示例/解决方案来解决如何在 Tkinter 上播放视频的问题似乎并不能提供流畅和快速的渲染。 例如: frame = self.vid_cap.read() frame =
此代码有效: img = PhotoImage(file="Image.gif") Label(root, image=img).pack() 这个方法怎么行不通? Label(root, image
这个问题在这里已经有了答案: Why does Tkinter image not show up if created in a function? (5 个答案) 关闭 4 年前。 我正在尝试在
我正在将 numpy 数组(使用 OpenCV 加载的网络摄像头素材)转换为 Tkinter PhotoImage 对象以在 Tkinter GUI 上显示它们。但是,函数 PIL.ImageTk.P
当操作 PhotoImage 对象时: import tkinter as tk img = tk.PhotoImage(file="myFile.gif") for x in range(0,100
所以我在 macbook pro 上运行 python 2.6 并尝试用 python 编写代码以在 tkinter gui 上的标签中显示文件中的图像。该图像称为 image.png。当我使用这段代
我收到错误'PhotoImage instance has no attribute 'resize'',尽管有多个在线资源表明这是使用 PIL 调整图像大小的方法。有什么想法吗? 相关代码: Dea
我正在研究 Yolo3-4-PY 以使用 tkinter 实现它。 我到处查找,但无法解决问题。 当我运行程序时,会显示 Canvas ,但是当我单击“开始视频”( btton ) 时,出现以下错误:
我是一名优秀的程序员,十分优秀!