当前位置: 首页 > 面试题库 >

使用tkinter在带有for语句的标签中显示图片,可以吗?

扶开诚
2023-03-14
问题内容

我正在尝试随机打印一堆图片;问题是,如果我运行以下代码,那么所有发生的就是它会创建一组空白的空标签。如果我将“ image = pic”替换为“ text
=’whatever’”,则效果很好(因此证明它确实创建了标签)。即使我使用’pic = PhotoImage(file = w
[0])’,也可以将标签和图像放置在其他任何地方(证明它不是图像)也可以正常工作(因此,我认为它不是我的方法)。 。

from tkinter import *
from tkinter import ttk
import random

root = Tk()
root.title("RandomizedPic")

def randp(*args):
    w = ['wb.gif', 'wc.gif', 'wd.gif', 'we.gif']
    random.shuffle(w)
    am = 1

    for i in w:
        pic = PhotoImage(file=i)
        ttk.Label(mainframe, image=pic).grid(column=am, row=0, sticky=(W, E))
        am+=1


mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

ttk.Button(mainframe, text="Do it", command=randp).grid(column=0, row=0, sticky=W)

root.bind('<Return>', randp)
root.mainloop()

任何有关如何使其正常工作的建议将不胜感激。


问题答案:

这是tkinter的一个众所周知的问题-您必须保留对所有Photoimages的引用,否则python将对其进行垃圾回收-
这就是您的图像所发生的事情。仅将它们设置为标签的图像不会增加图像对象的引用计数。

解:

要解决此问题,您将需要对创建的所有图像对象的持久引用。理想情况下,这将是类命名空间中的数据结构,但是由于您未使用任何类,因此模块级列表将必须执行:

pics = [None, None, None, None]   #  This will be the list that will hold a reference to each of your PhotoImages.

def randp(*args):
    w = ['wb.gif', 'wc.gif', 'wd.gif', 'we.gif']
    random.shuffle(w)
    am = 1

    for k, i in enumerate(w):    # Enumerate provides an index for the pics list.
        pic = PhotoImage(file=i)
        pics[k] = pic      # Keep a reference to the PhotoImage in the list, so your PhotoImage does not get garbage-collected.
        ttk.Label(mainframe, image=pic).grid(column=am, row=0, sticky=(W, E))
        am+=1


 类似资料:
  • 问题内容: 我了解如何使用精灵,但是IMG标签不是必需的“ src”属性吗?我总是可以使用SPAN或其他标签并设置background / width / etc,但从语义上讲不会正确。 基本上,我想为IMG标签省略SRC,而只使用精灵,但是我担心HTML在技术上因此无效。谢谢。 问题答案: 关于语义正确性: 当图像具有语义时, 因此被认为是内容,请 使用IMG标签 (不带图片)和正确设置的ALT

  • 本文向大家介绍python tkinter canvas 显示图片的示例,包括了python tkinter canvas 显示图片的示例的使用技巧和注意事项,需要的朋友参考一下 先来看一下该方法的说明 关于image有两个重要的点要注意,一个是格式,第二是要保持持续引用 The image object. This should be a 1.This should be a PhotoImag

  • 本文向大家介绍python使用Tkinter显示网络图片的方法,包括了python使用Tkinter显示网络图片的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python使用Tkinter显示网络图片的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 我将游标声明放在准备好的语句中,然后执行它,然后返回一个

  • 问题内容: 我在使用Tkinter和PIL更新标签时遇到了一个“小”问题。 当我按下起 司 按钮时,它应该显示foo2,但是它只显示白色屏幕。有什么建议? 这是我的代码: 问题答案: 好吧,我认为原因是当您按下按钮时。这是因为此行: 应该: 出现这种情况,是因为,等回报。

  • 本文向大家介绍在MySQL中使用带有TINYINT的Update语句?,包括了在MySQL中使用带有TINYINT的Update语句?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表。我们已将其中一列设置为TINYINT类型- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是使用TINYINT实现UPDATE语句的查询- 让我们再次