【问题标题】:Why destroy() doesn't work after 'label_x' is modified?为什么 destroy() 在 \'label_x\' 被修改后不起作用?
【发布时间】:2022-12-21 20:19:21
【问题描述】:

如果我点击按钮 '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()

【问题讨论】:

    标签: python tkinter destroy


    【解决方案1】:

    每次调用 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)
    

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

    【讨论】:

      【解决方案2】:

      我解决了你的问题。您不要在欢迎功能中复制label_xlabel_x.grid。只需添加label_x.configure,并在欢迎函数中使用 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()
      

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

      【讨论】:

        猜你喜欢
        • 2021-12-03
        • 1970-01-01
        • 2017-02-09
        • 1970-01-01
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多