Классы, взаимодействующие друг с другом - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу, чтобы один класс взаимодействовал с другим через функцию. кнопка, которую при нажатии добавляют 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 Ответ

1 голос
/ 16 апреля 2019

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

В вашем коде это, вероятно, означает, что вы должны передать ссылку на экземпляр 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
...