Да, вы правы, это проблема объекта. В функции Purchase_For_points () в классе PlayScreen. Вы снова создаете объект для доступа к классу App. Это скопирует все атрибуты в новом объекте и уменьшит Num каждый раз в новом объекте Running App.
И, то, что показано на экране, переменная Num основного объекта приложения, которая создается при запуске приложения. Итак, для уменьшения и увеличения переменной Num у вас должен быть доступ к основному объекту приложения.
В вашем коде я вижу, что вы предоставили доступ класса App к классу Rewards_Handler методом init, Таким образом, в классе Rewards_Handler игровой объект совпадает с Главный объект приложения .
создает в классе Rewards_Handler другую функцию для уменьшения значения, поскольку это класс, который обрабатывает вещи, связанные с вознаграждением
class Rewards_Handler(RewardedListenerInterface):
def decrementReward(self):
self.game.Num -= 1
Для доступа к этой функции из разных классов вы можете создать функцию в классе приложения. Это должен быть метод stati c, чтобы вы не создавали другой объект и не ловили объекты
class SlipsApp(MDApp):
@staticmethod
def decrement(element): #The element will be the main app object.
element.reward.decrementReward()
Теперь для получения доступа к классу, в котором вы хотите использовать эту функцию для уменьшения. Просто добавьте метод init () в класс
class PlayScreen(Screen):
def __init__(self, **kw):
super().__init__(**kw)
self.app = MDApp.get_running_app() #this is main app object
def Purchase_For_points(self):
SlipsApp.decrement(self.app) #passing main App object.