Как запустить файл python внутри другого файла python с помощью диспетчера экрана в kivy - PullRequest
0 голосов
/ 09 июля 2020

У меня есть два файла python с именами a.py и b.py, a.py - это простой код kivy, а другой b.py также является кодом kivy с диспетчером экрана. Проблема в том, что я хочу вызвать a.py внутри b.py, содержащего kivy screenmanger. Но он не работает должным образом, он запускает только файл a.py. Я делаю это, чтобы сегментировать свой код, потому что он станет больше.

# a.py file


import kivy
from kivy.app import App
from kivy.uix.floatlayout import Floatlayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.label import Label 


class LandingScreen(FloatLayout):
    def __init__(self, **kwargs):
        super(LandingScreen, self).__init__(**kwargs)

         
        self.btn1=Button(text='button1 ', size_hint=(0.5, 0.5), 
        on_press=self.click_b1))
        self.btn2=Button(text='button2', size_hint=(0.5, 0.5), 
        on_press=self.click_b2))


            
        self.add_widget(self.btn1)
        self.add_widget(self.btn2)

        def click_b1(self, instance):
             
             pass
        def click_b2(self, instance):
             pass
       
class SplashApp(App):
    def build(self):
        return LandingScreen()

if __name__ == '__main__':

# b.py file containing screemanager

import a

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition


class ScreenManagement(ScreenManager):
    def __init__(self, **kwargs):
        super(ScreenManagement, self).__init__(**kwargs)


class RegisterWindow(Screen):
    def __init__(self, **kwargs):
        super(RegisterWindow, self).__init__(**kwargs)
        
    a.SplashApp().run()


class LoginWindow(Screen):
        def __init__(self, **kwargs):
            super(LoginWindow, self).__init__(**kwargs)
            self.btn2 = Button(text='Go')
            self.add_widget(self.btn2)
            self.btn2.bind(on_press = self.screen_transition)

        def screen_transition(self, *args):
            self.manager.current = 'register'


class Application(App):
    def build(self):
        sm = ScreenManagement(transition=FadeTransition())
        sm.add_widget(LoginWindow(name='login'))
        sm.add_widget(RegisterWindow(name='register'))
        return sm


if __name__ == "__main__":
    Application().run()

1 Ответ

0 голосов
/ 09 июля 2020

В вашем b.py оператор:

a.SplashApp().run()

запускает SplashApp. Но вызов run() из App не возвращается, пока App не остановится. Значит, после этого оператора ничего не будет выполнено.

...