【问题标题】:Python, Tkinter, Function to destroy Images. (multiple arguments)Python,Tkinter,销毁图像的函数。 (多个参数)
【发布时间】:2014-09-03 17:59:38
【问题描述】:

我一直在 Tkinter 中制作程序,基本上我想删除所有放置在要删除的窗口上的图像。看到我创建(或尝试:P)的功能负责清除窗口,我需要它能够从程序中的任何位置删除我想要的任何内容。

此窗口上有 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))

【问题讨论】:

  • 嗯。继续研究这个,我有点完成了这个功能,但我想它不是“专业的”。仍然对其他人关于这个主题的知识感兴趣。但是,关于 img.after(5000) 这个,就像 time.sleep() 在打开窗口之前等待时间一样,我如何让它打开窗口然后等待时间?

标签: python function parameters tkinter destroy


【解决方案1】:

首先,当您计算变量时,您应该使用其他东西来代替,在本例中是一个列表,因此您只需将一个列表传递给函数。在函数中,您可以遍历序列项并为每个项调用destroy。如果您为 GUI 创建一个类会更容易。

问题是你调用函数removewidgetsimg.after参数。由于调用了所有可调用参数并使用了它们的返回值,因此您调用了事件None。 请改用此构造:

img.after(5000, lambda: removewidgets(img, img1))

lambda 创建一个匿名函数,因此您使用 函数对象 作为参数。

您不需要输入return;,顺便说一句。如果没有指定return,函数将返回None

【讨论】:

  • 好的,谢谢 :) 我将进一步研究在函数中使用列表,如果你说它更容易,可能会考虑创建一个类。而 Lambda,完美运行,现在就去阅读它。以前从未听说过,所以我很高兴你提到它:) 每天学习哈哈。干杯:)
  • 好吧,如果你直接使用一个类,你可以忘记参数故事,直接访问类内部的属性。在这种情况下,您可以使用img.after(5000, self.removewidgets)
  • 好吧,我会考虑使用类,但它必须等到明天 :( 现在出去。感谢您的帮助,非常感谢,我会让你知道我是如何处理这个的。塔:)
  • Urrgg... 一直在尝试通过多个站点和视频学习课程,到目前为止已经能够按照教程进行操作,但我很难利用这些新知识并将其带入我自己的代码中。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2013-03-06
  • 2016-08-27
相关资源
最近更新 更多