Я хочу, чтобы приложение сменило экран с экрана EntryWindow на главный экран примерно через одну секунду. Поскольку у меня уже были проблемы с текущим свойством ScreenManager для фактического переключения экранов, я даже не пытался использовать Clock для запуска переключения после одной секунды EntryWindow. Может ли кто-нибудь помочь мне с этим?
У меня есть Python версии 3.12, kivy версии 2.3.0 и kivymd версии 1.2.0.
Это мой файл .py:
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.metrics import dp
from kivy.core.window import Window
from kivy.clock import Clock
import random as rd
Window.size = (360,640)
class MainApp(MDApp):
def build(self):
screen = Builder.load_file("myKv.kv")
self.theme_cls.primary_palette ="Orange"
self.theme_cls.primary_hue = "A700"
self.theme_cls.theme_style="Dark"
return screen
class EntryWindow(Screen):
def on_enter(self):
sm.current = "home"
class Home(Screen):
pass
class Exercises(Screen):
pass
class Gender(Screen):
def on_enter(self):
self.ids.extractedWord.color = (1,1,1,1)
f = open(".venv/genderWordDatabase.txt")
red = f.readlines()
stripped = [elem.strip() for elem in red]
separato = [elem.split() for elem in stripped]
dizWords = {}
for i in separato:
dizWords[i[1]] = (i[0],i[2])
print(dizWords)
extracted = list(dizWords.keys())[rd.randint(0,len(dizWords)-1)]
self.ids.extractedWord.font_style = "H6"
self.ids.extractedWord.text = extracted
def recordUpdate(self,extractedWord,operand):
f = open(".venv/genderWordDatabase.txt", "r")
red = f.readlines()
f.close()
for i in range(0,len(red)):
if extractedWord in red:
red = " ".join(red.strip("\n").split()[:-1]) + " " + str(int(red.strip("\n").split()[2])+operand)+"\n"
g = open(".venv/genderWordDatabase.txt", "w")
g.writelines(red)
def wordExtraction(self):
self.ids.extractedWord.color = (1,1,1,1)
f = open(".venv/genderWordDatabase.txt")
red = f.readlines()
f.close()
stripped = [elem.strip() for elem in red]
separato = [elem.split() for elem in stripped]
dizWords = {}
for i in separato:
dizWords[i[1]] = (i[0],i[2])
extracted = list(dizWords.keys())[rd.randint(0,len(dizWords)-1)]
self.ids.extractedWord.font_style = "H6"
self.ids.extractedWord.text = extracted
def check(self, answer):
f = open(".venv/genderWordDatabase.txt")
red = f.readlines()
f.close()
stripped = [elem.strip("\n").strip() for elem in red]
separato = [elem.split() for elem in stripped]
dizWords = {}
for i in separato:
dizWords[i[1]] = (i[0],i[2])
print(dizWords)
parola = self.ids.extractedWord.text
if dizWords[parola][0] == answer:
self.ids.extractedWord.color = (0,1,0,1)
self.ids.extractedWord.font_style = "H6"
self.ids.extractedWord.text = "Right +1"
#Chiamo la funzione che aggiorna il record di ciascuna parola
self.recordUpdate(dizWords[parola][0],1)
Clock.schedule_once(lambda dt: self.wordExtraction(), 1)
else:
self.ids.extractedWord.color = (1,0,0,1)
self.ids.extractedWord.font_style = "Body1"
self.ids.extractedWord.text = "Wrong -1, the correct one was: " + dizWords[self.ids.extractedWord.text][0]
self.recordUpdate(dizWords[parola][0],-1)
Clock.schedule_once(lambda dt: self.wordExtraction(), 2)
sm = ScreenManager()
sm.add_widget(EntryWindow(name="starting"))
sm.add_widget(Home(name="home"))
sm.add_widget(Exercises(name="exercises"))
sm.add_widget(Gender(name="gender"))
MainApp().run()
а это мой файл .kv:
ScreenManager:
EntryWindow:
Home:
Exercises:
:
name: "starting"
BoxLayout:
orientation: "vertical"
Widget:
MDLabel:
text: "German"
halign: "center"
markup: True
color: (1,1,1,1)
font_style: "H3"
MDLabel:
text: "By Staffo"
markup: True
color: (1,1,1,1)
halign: "center"
font_style: "H6"
Widget:
Widget:
:
name: "home"
AnchorLayout:
anchor_x: "center"
anchor_y: "center"
BoxLayout:
orientation: "vertical"
spacing: 30
Widget:
MDFillRoundFlatButton:
text: "exercises"
pos_hint: {"center_x":0.5,"center_y":0.5}
on_press:root.manager.current = "exercises"
MDFillRoundFlatButton:
text: "customize dictionary"
pos_hint: {"center_x":0.5,"center_y":0.5}
#on_press:root.manager.current = "customize"
MDFillRoundFlatButton:
text: "Settings"
pos_hint: {"center_x":0.5,"center_y":0.5}
#on_press:root.manager.current = "settings"
MDFillRoundFlatButton:
text: "Credits"
pos_hint: {"center_x":0.5,"center_y":0.5}
#on_press: root.manager.current = "credits"
Widget:
:
name: "exercises"
AnchorLayout:
anchor_x: "center"
anchor_y: "center"
BoxLayout:
orientation: "vertical"
spacing: 30
Widget:
MDFillRoundFlatButton:
text: "M/F/N/P"
markup: True
pos_hint: {"center_x":0.5,"center_y":0.5}
on_press:root.manager.current = "gender"
text_color: (1,1,1,1)
MDFillRoundFlatButton:
text: "Learn New Words"
markup: True
text_color: (1,1,1,1)
pos_hint: {"center_x":0.5,"center_y":0.5}
#on_press:root.manager.current = ""
MDFillRoundFlatButton:
text: "Phrases"
markup: True
text_color: (1,1,1,1)
pos_hint: {"center_x":0.5,"center_y":0.5}
#on_press:root.manager.current = ""
MDFillRoundFlatButton:
text: "Listening"
markup: True
text_color: (1,1,1,1)
pos_hint: {"center_x":0.5,"center_y":0.5}
#on_press: root.manager.current = ""
Widget:
:
name: "gender"
AnchorLayout:
anchor_x: "center"
anchor_y: "center"
BoxLayout:
orientation: "vertical"
Widget:
Widget:
Widget:
MDCard:
size_hint: .85, 2
pos_hint: {"center_x": .5, "center_y": .5}
MDRelativeLayout:
MDLabel:
halign: "center"
id: extractedWord
markup: True
text: "extractedWord"
font_style: "H6"
color: (0,0,0,1)
BoxLayout:
spacing: 20
Widget:
MDFillRoundFlatButton:
text: "der"
markup: True
text_color: (1,1,1,1)
on_press: root.check("der")
MDFillRoundFlatButton:
text: "die"
markup: True
text_color: (1,1,1,1)
on_press: root.check("die")
MDFillRoundFlatButton:
text: "das"
markup: True
text_color: (1,1,1,1)
on_press: root.check("das")
Widget:
Widget:
Widget:
Widget:
Widget:
и я получаю следующую ошибку:
kivy.uix.screenmanager.ScreenManagerException: No Screen with name "home".
Подробнее здесь: https://stackoverflow.com/questions/791 ... me-propert
Текущее свойство Kivy ScreenManager не находит экраны с указанным свойством имени ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение