Классы, взаимодействующие друг с другом

#python #class #tkinter #interaction

#python #класс #tkinter #взаимодействие

Вопрос:

я хочу, чтобы один класс взаимодействовал с другим через функцию. кнопка, при нажатии на которую добавляется 1. Но когда я выполняю взаимодействие, появляется сообщение об ошибке, которое Resources не было определено

это то, что я пытаюсь, но ничего не происходит

 from tkinter import *


class Caracteristicas:

    def __init__(self,master):

        self.caracteristicas = Frame(master)
        self.caracteristicas.grid(row=1,column=0)

        self.forca = Label(self.caracteristicas, text='FORÇA FÍSICA')
        self.forca.grid(row=0,column=0)

        self.show_forca = Label(self.caracteristicas,text='1')
        self.show_forca.grid(row=0,column=1)

        self.b_forca = Button(self.caracteristicas,text=' ',command=self.ad_for)
        self.b_forca.grid(row=0,column=2)

        self.Forca = 1

    def ad_for(self):
        global Forca
        self.Forca  = 1
        Vida = self.Forca   10
        self.show_forca['text'] = self.Forca
        Recursos.show_ferimentos['text'] = Vida


class Recursos:

    def __init__(self, master):

        self.recursos = Frame(master)
        self.recursos.grid(row=1,column=1)

        self.ferimentos = Label(self.recursos, text='FERIMENTOS')
        self.show_ferimentos = Label(self.recursos, text='10')

        self.ferimentos.grid(row=0,column=0)
        self.show_ferimentos.grid(row=1,column=0)


ficha = Tk()
a = Caracteristicas(ficha)
b = Recursos(ficha)
ficha.mainloop()

  

Я хотел бы знать, как обеспечить взаимодействие между Characteristics классом и Resources классом

Мне удалось решить предыдущую проблему, однако появилась другая. Это моя основная программа, и предлагаемое решение в данном случае не работает.

 from tkinter import *
from Caracteristicas import Caracteristicas
from Recursos import Recursos

ficha = Tk()
a = Caracteristicas(ficha)
b = Recursos(ficha)
ficha.mainloop()
  

в случае, если это разные документы, которые будут использоваться в основном

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

1. Последняя часть вашего вопроса на португальском языке. Пожалуйста, обновите его, поскольку этот форум предназначен только для английского языка.

2. изменить Recursos.show_ferimentos['text'] = Vida на b.show_ferimentos['text']

3. @HenryYik, спасибо, приятель, это сработало. Но не могли бы вы сказать мне, почему обмен?

4. b представляет экземпляр Recursos созданного вами класса, в то время Recursos как является только ссылкой на класс Recursos .

5. Спасибо @HenryYik, но появилась другая проблема. Можете ли вы мне помочь? проверьте случай, я обновил

Ответ №1:

Если у вас есть экземпляры двух классов, и вам нужна функция в одном из них для изменения данных или вызова методов в другом, вы обычно захотите передать ссылку на другой объект в тот, который будет взаимодействовать с ним.

В вашем коде это, вероятно, означает, что вы должны передать свою ссылку на Recursos экземпляр в конструктор вашего Caracteristicas объекта, где его можно будет использовать позже.

Вот очень сокращенная версия того, как это может выглядеть:

 class Caracteristicas:
    def __init__(self, master, resource):
        self.resource = resource    # save value for later
        ... # the rest of the constructor can be the same

    def ad_for(self):
        self.Forca  = 1
        Vida = self.Forca   10
        self.show_forca['text'] = self.Forca
        self.resource.show_ferimentos['text'] = Vida   # main change is here!
  

Вам также необходимо изменить код, в котором вы создаете свои объекты, на что-то вроде:

 b = Recursos(ficha)
a = Caracteristicas(ficha, b) # pass the reference to the resource object in