Из одного класса в другой перебросить переменную

У меня есть один класс A, в нем есть функция. Есть другой класс B, в нем есть функция. Если быть более точным, то мне нужно открыть доступ к переменным из одного класса в другом, так, чтобы не использовать метод global, возможно ли?

вот код:

class Root():
    """Инициализация приложения, открытие"""
    def init(self):
        self.root = Tk()
        self.root.title("Графический интерфейс чата")
        self.root.geometry('800x600')
        self.root.iconbitmap() #<= сюда нужна иконка приложения в формате ico
        self.root.resizable(False,False)


        '''Переменные'''

        self.message_send = ''



        '''Настройка поля для отправки сообщения'''
        self.entry = Entry(bd=1, width=40)
        self.entry.place(x=350, y=540)
        
        
        """Настойка кнопок"""
        self.button_send = PhotoImage(file="send_mes.png").subsample(4,4)
        self.b_send = Button(self.root, image=self.button_send, bd=0, command=Send_mes_button.send, width=80, height=80)
        self.b_send.place(x=620, y=490)

        self.button_zakr = PhotoImage(file="zakr.png").subsample(5,5)
        self.b_zakr = Button(self.root, image=self.button_zakr, bd=0, command=lambda : print("Нажата кнопка закрепить!"), width=60, height=60)
        self.b_zakr.place(x=690, y=490)     
        
class Send_mes_button():
    
    def send(self):
        
        
        
        self.Root.message_send = entry.get() #здесь возникает ошибка, перебровал все варианты в моем предыдущем вопросе ответы, но не сработало
        print(self.message_send)



Root().init()
Send_mes_button().send()

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

Автор решения: Никита

Используйте наследование. Вот как:

from tkinter import *

class Root:
    """Инициализация приложения, открытие"""
    def init(self):
        self.root = Tk()
        self.root.title("Графический интерфейс чата")
        self.root.geometry('800x600')
        self.root.resizable(False,False)


        '''Переменные'''

        self.message_send = ''



        '''Настройка поля для отправки сообщения'''
        self.entry = Entry(bd=1, width=40)
        self.entry.place(x=350, y=540)
        
        
        """Настойка кнопок"""
        self.b_send = Button(self.root, bd=0, width=80, height=80)
        self.b_send.place(x=620, y=490)

        self.b_zakr = Button(self.root, bd=0, command=lambda : print("Нажата кнопка закрепить!"), width=60, height=60)
        self.b_zakr.place(x=690, y=490)     
        
class Send_mes_button(Root): # В скобках вы указуете от какого класса наследовать (в данном случае о т Root)
    def __init__(self):
        self.init()
        self.b_send.config(command=self.send)
   
    def send(self):
        self.message_send = self.entry.get()
        print(self.message_send)

Send_mes_button().send()
→ Ссылка
Автор решения: splash58

Расширять Root стоит от Tk или от Frame

Ваши классы совершенно независимы, поэтому, содержимое поля ввода проще передать через lambda функцию, задав аргумент

command=lambda: Send_mes_button().send(self.entry.get()) 

Это сразу создаст объект класса и вызовет метод

Я закомментировал всё, что связано с изображениями, чтобы код можно было запустить везде. Верните тогда то, что нужно

Кстати, из кода не ясно, нужен ли вам отдельный класс. send мог быть просто метод в Root. Тогда вы могли там просто получить self.entry.get()

from tkinter import *

class Send_mes_button():

    def send(self, message_send):
        print(message_send)


class Root(Tk):
    """Инициализация приложения, открытие"""

    def __init__(self):
        super().__init__()
        self.title("Графический интерфейс чата")
        self.geometry('800x600')
        # self.iconbitmap()  # <= сюда нужна иконка приложения в формате ico
        self.resizable(False, False)

        '''Переменные'''

        '''Настройка поля для отправки сообщения'''
        self.entry = Entry(self, bd=1, width=40)
        self.entry.place(x=350, y=540)

        """Настойка кнопок"""
        # self.button_send = PhotoImage(file="send_mes.png").subsample(4, 4)
        self.b_send = Button(self, text="send", bd=0, command=lambda: Send_mes_button().send(self.entry.get()), width=80, height=80)
        self.b_send.place(x=400, y=490)

        # self.button_zakr = PhotoImage(file="zakr.png").subsample(5, 5)
        # self.b_zakr = Button(self, image=self.button_zakr, bd=0, command=lambda: print("Нажата кнопка закрепить!"), width=60, height=60)
        # self.b_zakr.place(x=690, y=490)


Root().mainloop()
→ Ссылка