分屏沮丧?
Split Screen in 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"
所以我希望看到 "Screen 1" 首先显示在两个按钮之上。然后,我可以按 "HomeScreen" 中的两个之一,它会在按下时在 "Screen 1" 和 "Screen 2" 之间切换。
当然,只需在您的示例中将 Screen 替换为 ScreenManager 并添加您喜欢的任何 Screens 即可。
如果您遇到具体问题,post 一个带有真实代码的示例,演示您认为应该工作的内容以及它如何失败。
您缺少对 screenmanager 对象的引用,您的主屏幕应该只是 screenmanager 下的另一个屏幕,按钮位于单独的布局上。
你看过kivy自带的例子了吗? 'showcase' 几乎完全符合您的要求。
我刚才问过这个问题 - 根据我在这里收到的反馈,我得到了以下代码。也许,这会帮助别人。
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'
再次感谢所有愿意在这里提供帮助的人。
我想在 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"
所以我希望看到 "Screen 1" 首先显示在两个按钮之上。然后,我可以按 "HomeScreen" 中的两个之一,它会在按下时在 "Screen 1" 和 "Screen 2" 之间切换。
当然,只需在您的示例中将 Screen 替换为 ScreenManager 并添加您喜欢的任何 Screens 即可。
如果您遇到具体问题,post 一个带有真实代码的示例,演示您认为应该工作的内容以及它如何失败。
您缺少对 screenmanager 对象的引用,您的主屏幕应该只是 screenmanager 下的另一个屏幕,按钮位于单独的布局上。
你看过kivy自带的例子了吗? 'showcase' 几乎完全符合您的要求。
我刚才问过这个问题 - 根据我在这里收到的反馈,我得到了以下代码。也许,这会帮助别人。
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'
再次感谢所有愿意在这里提供帮助的人。