【问题标题】:Split Screen in Kivy?Kivy中的分屏?
【发布时间】:2015-10-25 05:14:44
【问题描述】:

我想在 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”之间切换。

【问题讨论】:

  • @inclement 你能帮我修复我添加的代码吗?

标签: python kivy


【解决方案1】:

当然,只需在您的示例中将 Screen 替换为 ScreenManager 并添加您喜欢的任何屏幕。

如果您遇到特定问题,请发布一个包含真实代码的示例,展示您认为应该如何工作以及如何失败。

【讨论】:

  • 感谢您的回复。我在上面添加了我的真实示例,但它不起作用。事实是我不知道如何将屏幕放在 ScreenManager 下。
【解决方案2】:

您缺少对屏幕管理器对象的引用,您的主屏幕应该只是屏幕管理器下的另一个屏幕,按钮位于单独的布局上。

您是否查看了 kivy 附带的示例? “展示柜”几乎完全符合您的要求。

【讨论】:

  • 谢谢!这是一个很好的参考,但 ScreenMenager 下的屏幕在展示中属于同一类。我想为每个屏幕设置单独的类←目前没有充分的理由。
  • 您可能应该查看有关“规则”的文档,没有“在同一个类中”之类的东西,每个屏幕只是从同一个屏幕子类继承,您可以将它们放在不同的部分没有问题的 kv 文件(只需将它们命名为从 Screen 继承的其他名称)。
【解决方案3】:

我不久前问过这个问题 - 根据我在这里收到的反馈,我得到了以下代码为我工作。也许,这会帮助别人。

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()

基维代码:

<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'

再次感谢所有愿意在这里提供帮助的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多