Я пытаюсь создать приложение, которое имеет несколько экранов, и на каждом экране очки могут быть начислены игроку. Я искал много похожих проблем, но, похоже, не понимаю их / не применил их для моего случая.
- Первый вопрос: на каждом экране я хочу использовать GridLayout, а затем создавать ярлыки и кнопки для каждого игрока, используя для l oop, так как для каждого игрока должны быть созданы один и тот же ярлык и кнопка. (В отличие от того, что я делал до сих пор в файле .kv), я бы предпочел создать это для l oop внутри файла .py, а не файла .kv, так как у меня больше опыта в языке python, но оба решения, конечно, приветствуются. Как я могу сделать это для l oop? Я пытался что-то подобное в файле .kv, но это не работает:
GridLayout:
players: range(4)
[for i in root.players]
Label:
text: 'points player {}'.format(i)
Второй вопрос: Как я могу передать данные, которые я получил на первом экране из TextInput (имя игрока) на второй экран и использовать его там в метке (для отображения имени игрока)? Нужно ли для этого создать переменную в файле .kv? Если да, то как это будет выглядеть на языке .kv?
Третий вопрос: мне все еще неясно, как связать данные между файлом .kv и файлом .py. Например, как я могу использовать данные, полученные в файле .kv, из TextInput внутри файла .py? (В моем случае, чтобы отслеживать очки, которые есть у каждого игрока, и складывать эти очки вместе на каждом следующем экране. Я предполагаю, что это должно произойти в файле .py?)
Это что мне удалось сделать до сих пор:
.py файл
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
class WelcomeWindow(Screen):
# Introduce names of the 4 players
pass
class FirstRound(Screen):
#Give explanation of first round + option to add points for every player
pass
class WindowManager(ScreenManager):
pass
kv = Builder.load_file("Kingen.kv")
class KingenApp(App):
def build(self):
return kv
if __name__ == "__main__":
KingenApp().run()
.kv файл
WindowManager:
WelcomeWindow:
FirstRound:
<WelcomeWindow>:
name: "welcomewindow"
GridLayout:
cols: 2
Label:
text: "Name Player 1"
TextInput:
id: name_p1
multiline: False
Label:
text: "Name Player 2"
TextInput:
id: name_p2
multiline: False
Label:
text: "Name Player 3"
TextInput:
id: name_p3
multiline: False
Label:
text: "Name Player 4"
TextInput:
id: name_p4
multiline: False
Button:
text: "Go to first round"
on_release:
app.root.current = "firstround"
root.manager.transition.direction = "left"
<FirstRound>:
name: "firstround"
GridLayout:
id: 'gridlayout_firstround'
cols: 4
Button:
text: "Go back"
on_release:
app.root.current = "welcomewindow"
root.manager.transition.direction = "right"
Button:
text: "Go to second round"
on_release:
Помощь по любому из этих вопросов очень ценится, спасибо!