Помогите получить результат работы метода из одного Screen в другом Screen. Kivy
Помогите пожалуйста, я только изучаю Python, я пишу учебную программу с использованием kivy. Я никак не могу заставить работать метод одного класса Screen в другом Screen. В экране CoffeeWindow, после нажатия на любую из двух кнопок метод count() добавляет в список tup цифру соответствующую цифре с кнопки. Мне нужно показать содержимое списка на другом SumMenu Screen, чего я никак не могу добиться, если кто-то может, пожалуйста покажите, как это должно работать. Я пробовал расставлять id, использовать ObjectProperty, использовать ids, ничего не работает, очевидно, что я делаю что-то не правильно. Заранее благодарен!
main.py:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
class SumMenu(Screen):
pass
class CoffeeWindow(Screen):
tup = []
def count(self, num):
self.tup.append(num)
self.pos1 = self.tup.count(1)
self.pos2 = self.tup.count(2)
class WindowManager(ScreenManager):
pass
kv = Builder.load_file('my.kv')
class MainApp(App):
def build(self):
return kv
if __name__ == '__main__':
MainApp().run()
my.kv:
<CoffeeButton@Button>:
font_size: "23sp"
size_hint: 0.5, 0.12
bold: True
#text: "cof"
<HorizBoxLayout@BoxLayout>:
padding: 30
spacing: 25
orientation: "horizontal"
WindowManager:
CoffeeWindow:
SumMenu:
<SumMenu>:
name: "summenu"
BoxLayout:
pos_hint: {'center_x' : 0.5, 'center_y' : 0.6}
Label:
text: "position1 = #тут нужно показать содержимое переменной pos1"
BoxLayout:
pos_hint: {'center_x' : 0.5, 'center_y' : 0.5}
Label:
text: "position2 = #тут нужно показать содержимое переменной pos2"
HorizBoxLayout:
Button:
size_hint: 1, 0.1
font_size: "18sp"
pos_hint: {'center_x' : 0.5, 'y' : 0}
text: "Go to Coffee"
bold: True
on_release:
app.root.current = "coffee"
app.root.transition.direction = "right"
<CoffeeWindow>:
name: "coffee"
GridLayout:
rows: 3
size_hint: 1, 0.8
pos_hint: {'center_x' : 0.5, 'top' : 0.95}
padding: 40
spacing: 40
CoffeeButton:
text: "position 1"
on_release:
root.count(1)
CoffeeButton:
text: "position 2"
on_release:
root.count(2)
Button:
size_hint: 0.5, 0.1
font_size: "18sp"
pos_hint: {'right' : 0.5, 'y' : 0}
text: "Show Menu"
on_release:
app.root.current = "summenu"
Ответы (1 шт):
Прежде всего необходимо провести работу с файлом "my.kv":
Добавить в WindowManager для каждого окна id, для того, чтобы получить доступ к Screen из manager.
WindowManager: CoffeeWindow: id: coffee SumMenu: id: summenuДобавить id каждому элементу "Label" класса SumMenu.
<SumMenu>: name: "summenu" BoxLayout: pos_hint: {'center_x' : 0.5, 'center_y' : 0.6} Label: id: label1 BoxLayout: pos_hint: {'center_x' : 0.5, 'center_y' : 0.5} Label: id: label2
После чего в main.py дополнить класс SumMenu(Screen):
class SumMenu(Screen):
def on_enter(self, *args):
self.ids.label1.text = f"position1 = {self.manager.ids.coffee.pos1}"
self.ids.label2.text = f"position2 = {self.manager.ids.coffee.pos2}"