@Only4You

Как правильно вызвать метод одного класса из другого?

Только начал разбираться с ООП, многих азов еще не постиг, было бы неплохо, если б тут направили на верную дорогу.
Вот пример
from tkinter import *
from tkinter import ttk

class App(Tk):
    def __init__(self, parent):
        super().__init__()
        self.title('Main window')
        self.geometry('400x350+800+400')
        # self['background'] = "black"
        self.put_frames()

    def put_frames(self):
        self.add_mid_frame = Statusbar(self).grid(row=1, column=0, columnspan=3)
        self.add_bot_frame = Footterbar(self).grid(row=2, column=0, columnspan=3)

class Statusbar(Frame):
    def __init__(self, parent):
        super().__init__(parent)
        # self.f = Footterbar(self)
        self.put_widgets()

    def put_widgets(self):
        self.txt = Text(height=15, width=35).grid(row=1, column=0, columnspan=3)

    def refresh(self):
        self.destroy()
        self.__init__()

class Footterbar(Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.s = Statusbar(self)
        self.put_widgets()

    def put_widgets(self):
        self.btn4 = ttk.Button(text='4').grid(row=10, column=0)
        self.btn5 = ttk.Button(text='5').grid(row=10, column=1)
        self.btn6 = ttk.Button(text='6', command=self.s.refresh).grid(row=10, column=2)

app = App(Tk)
app.mainloop()


Нужно чтобы кнопка, находящаяся в классе Футера, обновляла текстовое поле Статусбара(можно и весь класс сразу.
Я понимаю есть 2 варианта (а может и больше):
1. Объявить метод непосредственно в классе Футтера и как-то сослаться на Статусбар, аля:
class Footterbar(Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.s = Statusbar(self)
        self.put_widgets()

    def put_widgets(self):
        self.btn4 = ttk.Button(text='4').grid(row=10, column=0)
        self.btn5 = ttk.Button(text='5').grid(row=10, column=1)
        self.btn6 = ttk.Button(text='6', command=self.refresh).grid(row=10, column=2)

    def refresh(self):
        self.s.destroy()
        self.s.__init__()

2. Как у меня, объявить метод в обновляемом классе и из другого класса запустить данный метод.
Надо сказать, ни один из этих вариантов у меня не удался. Постоянно высыпают флаги с ошибками.
Если не сложно, направьте пж на верный путь
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
EPIDEMIASH
@EPIDEMIASH
Человек швейцарский нож
У тебя экземпляр Statusbar создается отдельно в двух (классах) случаях. Передай его тоже в Footterbar.

self.footerbar = Footterbar(self, self.statusbar)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы