Python: tkinter удаляет объект из класса и делает его невидимым

#python #class #oop #tkinter #widget

#python #класс #ооп #tkinter #виджет

Вопрос:

Я хотел бы удалить объект из другого класса и сделать его невидимым.

Например, класс с кнопкой под названием Button 1 . Другой класс с кнопкой под названием Button 2 .

Когда я нажимаю на кнопку 2, я не хочу видеть кнопку 1.

 from tkinter import*

class Menu(Frame):

    def __init__(self,master):
        Frame.__init__(self,master,bg = "white")
        self.grid()
        self.button_clicks = 0
        self.create_widgets()

    def create_widgets(self):
        self.button = Button(self)
        self.button["text"] = "Button 1: 0"
        self.button["command"] = self.update_count
        self.button.grid(ipadx = 5, padx = 150)

    def update_count(self):
        self.button["text"] = "Another try: "   str(self.button_clicks)
        self.button_clicks  = 1
        if self.button_clicks > 10:
            self.button_clicks  = 0


class noMenu(Frame):

    def __init__(self,master):
        Frame.__init__(self,master,bg = "white")
        self.grid()
        self.button_clicks = 0
        self.create_widgets()

    def create_widgets(self):
        self.button = Button(self)
        self.button["text"] = "Bye button 1"
        self.button["command"] = self.byeMenu
        self.button.grid(ipadx = 5, padx = 150)

    def byeMenu(self):
        Menu.grid_forget()

app = Tk()
app.configure(background= "white")
app.title("Button on my but")
app.geometry("400x200")
first = Menu(app)
second = noMenu(app)
app.mainloop()
  

Ответ №1:

Если вы хотите, чтобы виджеты взаимодействовали, используйте тот факт, что они имеют общую родословную для достижения этой цели. Затем, если вы хотите, чтобы виджет «исчез», вы можете сделать это с помощью geometry manger, который вы используете

Примером для работы может быть:

 import Tkinter

class Main(Tkinter.Tk):
    def __init__(self, parent):
        Tkinter.Tk.__init__(self, parent)
        self.first = Menu(self)
        self.second = noMenu(self)

    def first_button_response(self):
        self.first.button.pack_forget()

class noMenu(Tkinter.Frame):
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, parent)
        self.button = Tkinter.Button(
            self, text="Bye button 1", command=parent.first_button_response
        )
        self.button.pack()
        self.pack()

class Menu(Tkinter.Frame):
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, parent)
        self.button = Tkinter.Button(self, text="Button 1")
        self.button.pack()
        self.pack()


if __name__ == "__main__":
    app = Main(None)
    app.mainloop()
  

Здесь я использовал pack_forget для удаления первой кнопки. Если вы хотите использовать grid manager, вам следует изучить grid_remove или grid_forget в зависимости от того, хотите ли вы, чтобы в какой-то момент кнопка снова появилась или нет.

Комментарии:

1. Спасибо, у меня недостаточно репутации, чтобы ваш ответ понравился. Мне нравится ваш ответ.

2. Плюс один за помощь ему.