我一直在Tkinter制作一个程序,基本上我想要删除已经放置在要删除的窗口上的所有图像。看到我创建的功能(或试图:P)负责清除窗口我需要它能够从程序中的任何一点删除我想要的任何内容。
这个窗口上的Theres 2图片,img和img1。 5000秒后? (另外我不确定但还没看过那个位)计时器将耗尽并导致该功能。但是我似乎将函数格式化错误。
正如你所看到的,我尝试使用(* A)但这看起来只是用于打印的字符串等而且不识别.destroy()。我尝试的另一件事是具有如下功能:
def removewidgets(A)(B)(C)(D):
A.destroy()
B.destroy()
C.destroy()
D.destroy()
return;
但我确信这是一种可怕的方法,无论如何它都没有用。 真的希望有人能解决我的问题,非常感谢!
继承代码。
import sys
from tkinter import *
from PIL import Image, ImageTk
#______________________________________________________________________________________
SWH = Tk()
SWH.geometry("1024x950+130+0")
SWH.title("ServiceWhiz.")
#_______________________________________________________________#GlobalFunctions#______
#ClearAllWidgets
def removewidgets(*A):
A.destroy()
return;
#_______________________________________________________________#LoadingPage#__________
load = Image.open("Logo.png")
render = ImageTk.PhotoImage(load)
img = Label(SWH,image=render)
img.image = render
img.place(x=458,y=250)
load = Image.open("PoweredByServiceWhiz.png")
render = ImageTk.PhotoImage(load)
img1 = Label(SWH,image=render)
img1.image = render
img1.place(x=362,y=612.5)
img.after(5000, removewidgets(img, img1))
答案 0 :(得分:2)
首先,当你对变量进行编号时,你应该使用别的东西,在本例中是一个列表,所以你只需要将一个列表传递给函数。在函数中,您可以遍历序列项并为每个序列项调用destroy
。如果你为GUI创建一个类,那就更容易了。
问题是你调用函数removewidgets
里面的<{em} img.after
参数。由于调用了所有可调用参数并使用了它们的返回值,因此调用事件None
。
请改用此构造:
img.after(5000, lambda: removewidgets(img, img1))
lambda
创建一个匿名函数,因此您使用函数对象作为参数。
您无需键入return;
,顺便说一句。如果未指定return
,则该函数将返回None
。