繁体   English   中英

为什么 destroy() 在修改 'label_x' 后不起作用?

[英]Why destroy() doesn't work after 'label_x' is modified?

如果我在启动这个小程序后点击按钮“ xxx ”,它会破坏窗口的所有小部件,除了按钮“问候我”......它应该......但是如果我在黄色的输入字段中写入一些东西然后点击'问候我'然后在' xxx '上......然后由于某种原因修改后的'label_x'将不再被删除......另外如果我在输入框中多次写一些名字然后点击'问候我'它只写在之前的标签上而不是先销毁/删除它。 为什么会这样,如何解决?

from tkinter import *
root = Tk()

# Creating an entry box
entry_box = Entry(root, width=10, relief="solid", bg="yellow" )
entry_box.grid(column=0, row=0)
entry_box.insert(3, "type name")

# Creating label widgets
label_x = Label(root, text="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
label_x.grid(column=0, row=2)
label_minus = Label(root, text="------------------------------")
label_minus.grid(column=0, row=3)

def greeter():
    label_x = Label(root, text="Welcome " + entry_box.get())
    label_x.grid(column=0, row=2)

# Creating greeter button
myButton = Button(root, text="greet me", command = lambda: [label_x.destroy(), greeter()])
myButton.grid(column=0, row=1)

x = Button(root, text="xxx", command = lambda: [label_x.destroy(), entry_box.destroy(), label_minus.destroy()])
x.grid(column=0, row=4)

root.mainloop()

每次调用 greeter() 函数时,都会创建一个新的 label_x 实例。 不同于全局 label_x 变量的 label_x。

一个快速修复方法是在 greeter() 函数中将 label_x 声明为全局变量。 像这样:

def greeter():
    global label_x
    label_x = Label(root, text="Welcome " + entry_box.get())
    label_x.grid(column=0, row=2)

它可能不是最好的解决方案,但它应该有效。

我解决了你的问题。 您不要在欢迎函数中复制label_xlabel_x.grid 只需添加label_x.configure ,并在 greeter 函数中使用 f-String 格式。 此外,您在mybutton命令中缺少myButton.destroy()
这是代码:

from tkinter import *
root = Tk()

# Creating an entry box
entry_box = Entry(root, width=10, relief="solid", bg="yellow" )
entry_box.grid(column=0, row=0)
entry_box.insert(3, "type name")

# Creating label widgets
label_x = Label(root, text="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
label_x.grid(column=0, row=2)
label_minus = Label(root, text="------------------------------")
label_minus.grid(column=0, row=3)

def greeter():
    label_x.configure(text=f"Welcome { entry_box.get()}")

    
# Creating greeter button
myButton = Button(root, text="greet me", command =  greeter)
myButton.grid(column=0, row=1)

x = Button(root, text="xxx",
           command = lambda: [myButton.destroy(), label_x.destroy(),
                              entry_box.destroy(), label_minus.destroy()])
x.grid(column=0, row=4)

root.mainloop()

结果之前; 结果输入名称和结果销毁小部件:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM