我有两个名为a.py和b.py的python文件,其中一个a.py只是简单的kivy代码,而另一个b.py也是带有Screen manager的kivy代码。问题是,我想在包含kivy屏幕管理器的b.py中调用a.py。但是它不能正常运行,它只运行.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()
在b.py
中,语句:
a.SplashApp().run()
启动CCD_ 2。但是App
的run()
调用直到App
停止才返回。因此,在执行该语句之后什么都不执行。