Je suis nouveau à Kivy et je voulais démarrer un petit projet d'application. Ce que je veux réaliser:
Jusqu'à présent, j'ai trouvé une solution de travail, mais cela ne me plaise pas vraiment de la façon dont cela fonctionne. Ce que je veux, c'est créer ScreenManager et écrans dans le fichier .kv et que le fichier .pyypy effectue la logique (quel écran à charger en vérifiant si UserData existe dans le magasin). P>
J'ai essayé: p>
Voici mon code de travail jusqu'à présent: p>
Main.py: p>
#:kivy 1.11.1 <MainWindow>: FloatLayout: Label: text: Button: text: "Go Back" pos_hint: {"x": 0.45, "top": 0.5} size_hint: (0.1, 0.05) on_release: app.root.current = "login" <LoginWindow>: nick: nickname isle: island hemisphere_n: hemisphere_n hemisphere_s: hemisphere_s FloatLayout: Label: text: "Nickname:" pos_hint: {"x": 0.45, "top": 0.7} size_hint: (0.1, 0.05) TextInput: id: nickname multiline: False pos_hint: {"x": 0.4, "top": 0.65} size_hint: (0.2, 0.05) Label: text: "Island Name:" pos_hint: {"x": 0.45, "top": 0.6} size_hint: (0.1, 0.05) TextInput: id: island multiline: False pos_hint: {"x": 0.4, "top": 0.55} size_hint: (0.2, 0.05) Label: text: "Hemisphere:" pos_hint: {"x": 0.45, "top": 0.5} size_hint: (0.1, 0.05) ToggleButton: id: hemisphere_n text: "North" group: "hemisphere" state: "down" pos_hint: {"x": 0.41, "top": 0.45} size_hint: (0.08, 0.05) ToggleButton: id: hemisphere_s text: "South" group: "hemisphere" pos_hint: {"x": 0.51, "top": 0.45} size_hint: (0.08, 0.05) Button: text: "Submit" pos_hint: {"x": 0.45, "top": 0.38} size_hint: (0.1, 0.05) on_press: root.submit() on_release: app.root.current = "main"
3 Réponses :
Ce que vous voyez est la transition code> animation. Vous pouvez éliminer cela en utilisant
notransition () code> comme ceci:
OK, cela éliminerait la transition visible, mais cela ne changerait pas la manière dont il fonctionne ou donnerait à l'écran de scénario une sorte de logique pour décider quel écran serait approprié d'afficher. Si cela ne fonctionne pas d'autre manière, j'utiliserais cette solution en combinaison avec l'écran blanc de @ Nattosai.
Je pensais que le si code>
sinon code> était la logique. Y a-t-il une autre logique pour décider quel
écran code> à afficher?
Oui c'est la logique que je mets là pour faire fonctionner les choses. Mais je cherche une possibilité d'avoir cette logique en cours d'exécution dans ScreenManager lui-même afin que l'écran ScreenManager soit capable de décider de l'écran d'abord. Comme suit: ScreenManager -> Vérifications pour UserData -> Si vous existez, affichez l'écran principal -> sinon afficher l'écran de connexion
Que diriez-vous d'ajouter un écran vide d'abord en plus de la réponse @ John.
sm.add_widget(Screen(name='blank')) for screen in screens: sm.add_widget(screen)
Vous pouvez mettre votre alors vous pouvez appeler le écran code> logique de choix à peu près où vous le souhaitez. Voici un exemple de la mise dans votre
WindowManager Code> Classe:
select_start_screen () code> dans votre
Construire () Code> Méthode: P>
class MainApp(App):
def build(self):
sm.select_start_screen()
return sm
Vous dites que cela fonctionne, mais cela ne vous plaisait pas. Qu'est-ce qui ne plaît pas exactement?
La façon dont cela fonctionne en ce moment: Aller à l'écran principal -> puis vérifiez s'il existe UserData stocké -> si vous n'allez pas sur l'écran UserForm / Connexion. N'y a-t-il pas une option pour vérifier à l'avance userData, puis basé sur le retour aller à l'écran principal ou userData? Le premier commutateur de l'écran principal à la connexion est en fait visible ...