如何使用kivy中的Screen manager在另一个python文件中运行python文件



我有两个名为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。但是Apprun()调用直到App停止才返回。因此,在执行该语句之后什么都不执行。

最新更新