-1

好的,所以我想在调用函数时显示 gif,但是 gif 将不可见并且不显示。我搜索了可能的答案,但他们都提到“创建对(在此处插入代码)的引用”,但我并没有真正明白,因为:1. 99% 的人使用我有 0 经验的对象和类 2. 一些说用“self.img = PhotoImage(...)”做一个引用,我很确定它连接到对象和类。3. 别人只说创建参考。

抱歉有点粗鲁。我真的受够了,我现在搜索了 2 个小时的答案。

我试图将变量分配给全局,将变量放在函数中并尝试重新制作 gif 并重命名文件

这就是我试图做的

def red_flicker():
    global root
    red_btn_flicker = tk.PhotoImage(file='test.gif')
    label_red = tk.Label(image=red_btn_flicker)
    label_red.place(x=red_btn_place_x, y=red_btn_place_y)

gif是不可见的。

请对菜鸟友好。任何关于 python 2.7 和使用对象/类的东西都将被忽略

4

2 回答 2

0

您必须保存参考,如该问题的答案所述:Why does Tkinter image not show if created in a function?

由于您不使用类,因此可以使用全局变量。例如:

def red_flicker():
    global red_btn_flicker

    red_btn_flicker = tk.PhotoImage(file='test.gif')
    label_red = tk.Label(image=red_btn_flicker)
    label_red.place(x=red_btn_place_x, y=red_btn_place_y)

另一种简单的技术是将图像附加为标签本身的属性。这是因为 python 允许您在对象上创建自定义属性。但是,您必须确保对标签本身的引用不会丢失

def red_flicker():
    global label_red

    red_btn_flicker = tk.PhotoImage(file='test.gif')
    label_red = tk.Label(image=red_btn_flicker)
    label_red.place(x=red_btn_place_x, y=red_btn_place_y)

    label_red.image = red_btn_flicker
于 2019-07-24T17:59:04.513 回答
0

好的,所以首先。

您的函数每次调用时都会添加一个新标签,因此您可能应该在全局命名空间中生成一次标签,然后将图像应用于函数中的标签。这样您就可以随意调用该函数,而无需添加更多标签。

我还将你的 PhotoImage 移动到全局,这样你就不需要在每次加载函数时都重新打开图像。

通过进行此更改,我们甚至不需要使用全局,因为小部件创建和图像加载已经在全局中发生。

确保保存对图像的引用,以免它被垃圾收集。

import tkinter as tk


root = tk.Tk()

red_btn_flicker = tk.PhotoImage(file='test.gif')
label_red = tk.Label(root)
label_red.pack()


def red_flicker():
    label_red.config(image=red_btn_flicker)
    label_red.image = red_btn_flicker # saving reference to image.


red_flicker()

root.mainloop()
于 2019-07-24T17:59:17.193 回答