2015-10-25 57 views
1

我想在Kivy中創建一個簡單的應用程序,但我想將主顯示分爲兩部分。頂部會有一些按鈕,它會保持不變。但是,在底部我想在不同的屏幕之間切換。這可能嗎?Kivy的分屏?

下面是一個簡化版本:

<home screen>: 
     BoxLayout: 

       Button: 


       Screen: 
        (Switch between Screen 1, and 2) 



<screen 1> 

<screen 2> 

我真的很感激一些幫助。謝謝!


好吧,這是我的非工作示例。

.py文件:

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.uix.boxlayout import BoxLayout 

class HomeScreen(Screen): 
    pass 

class Screen1(Screen): 
    pass 

class Screen2(Screen): 
    pass 

class SplitScreenApp(App): 
    def build(self): 

     sm = ScreenManager() 
     sm.add_widget(HomeScreen(name='home_screen')) 
     sm.add_widget(Screen1(name='screen_one')) 
     sm.add_widget(Screen2(name='screen_two')) 

     return sm 
if __name__ == "__main__": 
    SplitScreenApp().run() 

.kv文件

<HomeScreen>: 

    BoxLayout: 
     orientation: 'vertical' 
     rows: 3 

     ScreenManager: 
      size_hint_y: 0.8 

     Button: 
      size_hint_y: 0.1 
      on_press: 
       root.manager.transition.direction = 'left' 
       root.manager.current = 'screen_one' 
     Button: 
      size_hint_y: 0.1 
      on_press: 
       root.manager.transition.direction = 'left' 
       root.manager.current = 'screen_two' 


<Screen1>: 

    BoxLayout: 
     orientation: 'vertical' 
     rows: 1 
     Button: 
      text: "Screen 1" 

<Screen2>: 

    BoxLayout: 
     orientation: 'vertical' 
     rows: 1 
     Button: 
      text: "Screen 2" 

因此,我希望先看到兩個按鈕的頂部的 「畫面1」 節目。然後,我可以在「HomeScreen」中按下其中一個,並在按下時在「Screen 1」和「Screen 2」之間切換。

+0

@inclement你能幫我修復我添加的代碼嗎? –

回答

0

我問了一會兒 - 根據我在這裏收到的反饋,我得到了以下代碼爲我工作。也許,這會幫助別人。

的Python文件:

from kivy.app import App 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.uix.boxlayout import BoxLayout 

class HomeScreen(BoxLayout): 
    pass 

class Screen1(Screen): 
    pass 

class SplitScreenApp(App): 
    def build(self): 

     return HomeScreen() 

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

Kivy代碼:再次

<HomeScreen>: 
    name: 'ScreenManager' 
    BoxLayout: 
     orientation: 'vertical' 
     rows: 3 

     ScreenManager: 
      id: sm 
      size_hint_y: 0.8 

      Screen1: 

      Screen: 
       name: "screen_two" 
       BoxLayout: 
        orientation: 'vertical' 
        rows: 1 
        Button: 
         text: "Screen 2" 
         on_release: sm.current = 'screen_one' 

     Button: 
      text: "Screen 1" 
      size_hint_y: 0.1 
      on_press: 
       sm.transition.direction = 'left' 
       sm.current = 'screen_one' 
     Button: 
      text: "Screen 2" 
      size_hint_y: 0.1 
      on_press: 
       sm.transition.direction = 'left' 
       sm.current = 'screen_two' 

<Screen1>: 
    name: "screen_one" 
    BoxLayout: 
     orientation: 'vertical' 
     rows: 1 
     Button: 
      text: "Screen 1 Out" 
      on_release: root.parent.current = 'screen_two' 

感謝大家,願意幫助這裏。

3

當然,在你的例子中用ScreenManager替換Screen並添加你喜歡的任何Screens。

如果您遇到特定問題,請使用真實代碼發佈示例,以展示您認爲應該如何工作以及如何失敗。

+0

謝謝你的回覆。我在上面添加了我的真實示例,但它不起作用。事實是,我不知道如何將屏幕放置在ScreenManager下方。 –

1

您缺少對屏幕管理器對象的引用,並且您的主屏幕應該只是屏幕管理器下的另一個屏幕,並且按鈕位於單獨的版式中。

你有沒有檢查出與基維來的例子? '陳列'一個幾乎正是你想要的。

+0

謝謝!這是一個很好的參考,但ScreenMenager下的Screens與展示中的相同類。我想爲每個屏幕分開放置課程,目前沒有任何理由。 –

+0

你應該檢查'規則'的文檔,沒有'在同一個類中'這樣的東西,每個屏幕只是從相同的屏幕子類繼承,你可以把它們放在kv文件的不同部分沒有問題(只要將它們命名爲從屏幕繼承的其他東西)。 –