#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