#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. Плюс один за помощь ему.