Как уничтожить Label и Entry Tkinter Python?

Создаю label, ставлю его через place и пытаюсь удалить его self.label.destroy(), но ничего не получается, с entry то же самое, pack_forget не работает тоже. Combobox получается удалить через destroy. Как нужно удалять элементы label и entry?

from tkinter import *
from tkinter import ttk

class HoverButton(Button):
    def __init__(self, master, **kw):
        Button.__init__(self, master = master, **kw)
        self.defaultBackground = '#2A2C2E'
        self['bd'] = 0
        self['activebackground'] = '#3C3E3F'
        self['font'] = ('Roboto', 13)
        self['cursor'] = "hand2"
        self['bg'] = '#2A2C2E'
        self.bind("<Enter>", self.on_enter)
        self.bind("<Leave>", self.on_leave)
    def on_enter(self, e):
        self['background'] = '#262829'

    def on_leave(self, e):
        self['background'] = self.defaultBackground

class HoverLabel(Label):
    def __init__(self, master, **kw):
        Label.__init__(self, master = master, **kw)
        self['bg'] = '#17191A'
        self['fg'] = 'white'
        self['font'] = ('Roboto', 12)

class mainWindow:
    def __init__(self):
        self.root = Tk()
        self.root.configure(bg='#17191A')
        self.root.geometry("1050x650+400+200")
        self.root.minsize(850, 360)
        self.root.resizable(width=True, height=True)

        self.settings = [HoverButton(self.root, text="Button", fg='white', command=lambda: self.Settings()), 0]
        self.settings[0].place(x=20, y=180, width=150, height=70)


    def Settings(self):
        if self.settings[1] == 0:
            self.label = HoverLabel(self.root, text = "Text").place(x=600, y=30)
            self.settings[1] = 1
        else:
            self.label.destroy()
            self.settings[1] = 0
    


if __name__ == "__main__":
    app = mainWindow()
    app.root.mainloop()  

Ответы (2 шт):

Автор решения: insolor

В этой строке:

self.label = HoverLabel(self.root, text = "Text").place(x=600, y=30)

в self.label записывается результат вызова метода place (который всегда возвращает None), а не объект HoverLabel. Из-за этого потом при попытке вызвать destroy вылетает ошибка, что у NoneType нет метода destroy (программа не прерывается, но в терминале эту ошибку видно).

Чтобы работало правильно, нужно вызовы place, pack, grid делать отдельно:

self.label = HoverLabel(self.root, text = "Text")
self.label.place(x=600, y=30)
→ Ссылка
Автор решения: Иоанн Федоренко

На самом деле

    self.label.destroy() 

работает только в customtkinter. Вижу ты тоже новичок, что на tkinter кодишь. В tkinter нужно использовать функции например

    self.label.forget_pack() 
    self.label.forget_place()
    self.label.forget_grid()

в зависимости какой метод размешения использовался. Удачи в программировании! Поправочка:destroy работает тоже в tkinter но видимо у тебя он не работает так что можешь использовать что я написал. Удачи!

→ Ссылка