python - kivy底部工具栏等多屏
问题描述
两件事: 1 - 我想知道这是否是实现我想要的正确方法。切换屏幕时持续底部Appbar
2 - 我不知道如何删除底部 AppBar 顶部的额外填充。(bottomAppBar 和按钮之间的空白,见下文)
主文件
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_file("multi.kv")
class MainWindow(Screen):
pass
# Declare both screens
class MenuScreen(Screen):
pass
class SettingsScreen(Screen):
pass
class TestApp(MDApp):
def build(self):
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
return sm
if __name__ == '__main__':
TestApp().run()
多.kv
<MDBottomAppBar>:
MDToolbar:
title: "test"
left_action_items : [["menu", lambda x: print("menu pressed")]]
right_action_items : [["dots-vertical", lambda x: print("dots print")]]
icon: 'account'
icon_color : [1,0,0]
<MenuScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'Goto settings'
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'settings'
Button:
text: 'Quit'
MDBottomAppBar
<SettingsScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'menu'
MDBottomAppBar
谢谢
解决方案
您可以AppBar
通过不将其包含在您的Screens
. 您可以通过添加到您MainWindow
的:ScreenManager
MDBottomAppBar
MainWindow
kv
<MDBottomAppBar>:
MDToolbar:
title: "test"
left_action_items : [["menu", lambda x: print("menu pressed")]]
right_action_items : [["dots-vertical", lambda x: print("dots print")]]
icon: 'account'
icon_color : [1,0,0,1]
<MenuScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'Goto settings'
on_press:
root.manager.transition.direction = 'left'
root.manager.current = 'settings'
Button:
text: 'Quit'
# MDBottomAppBar
<SettingsScreen>:
BoxLayout:
orientation: "vertical"
BoxLayout:
Button:
text: 'My settings button'
Button:
text: 'Back to menu'
on_press:
root.manager.transition.direction = 'right'
root.manager.current = 'menu'
# MDBottomAppBar
<MainWindow>:
ScreenManager:
size_hint_y: None
height: root.height - appbar.height
y: appbar.top
MenuScreen:
name: 'menu'
SettingsScreen:
name: 'settings'
MDBottomAppBar:
id: appbar
现在该build()
方法只返回MainWindow()
:
class TestApp(MDApp):
def build(self):
return MainWindow()
推荐阅读
- angularjs - 无法使用自定义模板将动态数据加载到 ui-grid 下拉列表中(下拉数据是异步的)
- php - jQuery序列化多维表单数据无法在php中读取
- grafana - 格拉法纳点击屋
- angularjs - 为什么降序的 OrderBy 过滤器不起作用?
- php - 如何编写 GET 请求以检索 WooCommerce 上的所有产品(不仅是前 10 个)
- java - 如何从 Firebase Realtime DB 的键中获取所有值?
- flutter - Flutter 如何遍历映射和打印值
- c# - Mysql 和 Visual Studio 2019 for macOS 之间的连接不起作用
- tomcat - 在axis2.xml中检索当前工作目录
- pact-jvm - 无法发布到 Pack-Broker:重复键值违规