2017-10-20 12 views
0

私はいくつかのスクリーンを作成し、それらにプロパティ(レイアウト、ボタン、名前など)を追加しましたが、すべてがkivyファイルにあります。今、私は短い時間の後に開始画面から次の画面に私を連れて行くpythonのメインファイルで関数を作りたいと思います。私はkivyファイルからpythonファイルにすべてを移動する必要はありませんが、何も動作しないようです。何か案は?まず私は、クラスのプロパティとしてMainAppにしてScreenManagerのや場所についてScreenManagerのためのグローバル変数を作成し、画面のリストや辞書を作成.pyファイルは.kvファイルとやり取りする

の.py

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.lang import Builder 
from kivy.uix.image import Image 
from kivy.uix.label import Label 
from kivy.uix.behaviors import ButtonBehavior 


class MainScreen(Screen): 
    pass 

class AnotherScreen(Screen): 
    pass 


class AndAnotherScreen(Screen): 
    pass 


class ScreenManagement(ScreenManager): 
    pass 

class BackgroundLabel(Label): 
    pass 

class CompanyImage(Image): 
    pass 

class LoadingScreen(Screen): 
    def __init__(self, **kwargs): 
     super(LoadingScreen, self).__init__(**kwargs) 
    def ChangeScreen(self): 
     ScreenManager().current = MainScreen().name 



presentation = Builder.load_file("tsalapp.kv") 


class MainApp(App): 
    def build(self): 
     return presentation 


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

.kv

#: import FadeTransition kivy.uix.screenmanager.FadeTransition 
#:import Clock kivy.clock.Clock 
#: import Color kivy.graphics 
#: import Rectangle kivy.graphics 

ScreenManagement: 
    transition: FadeTransition() 
    LoadingScreen: 
    MainScreen: 
    AnotherScreen: 
    AndAnotherScreen: 

<BackgroundLabel>: 
    background_color: 30,144,255,1 
    canvas.before: 
     Color: 
      rgba: self.background_color 
     Rectangle: 
      pos: self.pos 
      size: self.size 

<LoadingScreen>: 
    name: "main" 
    id: "yolo" 
    on_enter: Clock.schedule_once(none, 3) 
    #app.root.current: "menu" 
    Image: 
     source: 'Untitled.png' 
     height: root.height 
     width: root.width 
     allow_stretch: True 
     keep_ratio: False 
    AnchorLayout: 
     Label: 
      text: "Tsala Inc." 
      anchor_x: 'center' 
      anchor_y: 'center' 
      font_size: root.height/15 





<MainScreen>: 
    name: "menu" 
    id: "swag" 
    BoxLayout: 
     orientation: "vertical" 
     Button: 
      text: "Next Page" 
      background_color: 1,1,4,1 
      size_hint: (0.5, 0.5) 
      on_release: 
       app.root.current= "Another Screen" 
     Button: 
      text: "Previous Page" 
      background_color: 1,4,1,1 
      size_hint: (0.5, 0.5) 
      on_release: 
       app.root.current= "And Another Screen" 

<AnotherScreen>: 
    name: "Another Screen" 
    GridLayout: 
     cols: 2 
     Button: 
      text: "Previous Page" 
      background_color: 0,0,1,1 
      size_hint: (0.25,1) 
      on_release: 
       app.root.current = "menu" 
     Button: 
      text: "Exit" 
      background_color: 1,0,0,1 
      size_hint: (0.25, 1) 
      on_release: 
       exit() 

<AndAnotherScreen>: 
    name: "And Another Screen" 
    BoxLayout: 
     orientation: "vertical" 
     Button: 
      text: "Next Page" 
      background_color: 1,1,4,1 
      size_hint: (0.5, 0.5) 
      on_release: 
       app.root.current= "menu" 
     Button: 
      text: "Nextest Page" 
      background_color: 1,4,1,1 
      size_hint: (0.5, 0.5) 
      on_release: 
       app.root.current= "Another Screen" 

答えて

1

をお勧めします:

class MyApp(App): 

    sm = ScreenManager() # screenmanager 
    screens = {} # dictionary for the screens, I prefer dictionary because string indexes are more convenient 

次に、作成方法では、すべての画面を作成できます私は、

MyApp.sm.switch_to(MyApp.screens['another_screen'], direction='left', duration=1) 
+0

私はそれを試してみましたが、まだ動作しているように見えるdoesntの:DとルートウィジェットとしてScreenManagerのを返す:あなたはswitch_toメソッドを使用して好きな場所

class MyApp(App): sm = ScreenManager() # screenmanager screens = {} # dictionary for the screens, I prefer dictionary because string indexes are more convenient def build(self): self.__create_screens() MyApp.sm.add_widget(MyApp.screens['main_screen']) return MyApp.sm def __create_screens(self): MyApp.screens['main_screen'] = MainScreen(name='mainscreen') MyApp.screens['another_screen'] = AnotherScreen(name='another_screen') MyApp.screens['and_another_screen'] = AndAnotherScreen(name='and_another_screen') 

は、だから今、あなたが簡単にアプリの画面を切り替えることができますkvファイルからpythonファイルにすべてを移動する必要があります。これはコードがかなり奇妙になるので避けたいものです。 – tsalamagewski

+0

@tsalamagewskiビルド時にscreenmanagerを返そうとしました(更新を参照)。 – saband

関連する問題