Python KivyMD:屏幕内容与工具栏重叠
我正在用KivyMD编写一个简单的应用程序。根据kivy文档,带有MDNavigationDrawer和MDToolbar的.kv结构是正确的,只要屏幕是空的,一切都可以正常工作。当我向它们添加内容时,内容(而不是工具栏下的内容)位于其上方。我怎样才能修好它 这是我的密码:Python KivyMD:屏幕内容与工具栏重叠,python,user-interface,kivy,Python,User Interface,Kivy,我正在用KivyMD编写一个简单的应用程序。根据kivy文档,带有MDNavigationDrawer和MDToolbar的.kv结构是正确的,只要屏幕是空的,一切都可以正常工作。当我向它们添加内容时,内容(而不是工具栏下的内容)位于其上方。我怎样才能修好它 这是我的密码: from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout from kivy.properties import ObjectPropert
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivymd.app import MDApp
KV = '''
<ContentNavigationDrawer>:
ScrollView:
MDList:
OneLineListItem:
text: "Screen 1"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 1"
OneLineListItem:
text: "Screen 2"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 2"
Screen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: "Test"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
NavigationLayout:
x: toolbar.height
ScreenManager:
Screen:
name: "scr 1"
ScrollView:
BoxLayout:
orientation: "vertical"
Button:
text: "Hello"
Button:
text: "I wish"
Button:
text: "I could"
Button:
text: "Finally get"
Button:
text: "This to work"
Screen:
name: "scr 2"
MDLabel:
text: "Screen 2"
halign: "center"
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
'''
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
class TestNavigationDrawer(MDApp):
def build(self):
return Builder.load_string(KV)
TestNavigationDrawer().run()
来自kivy.lang导入生成器
从kivy.uix.boxlayout导入boxlayout
从kivy.properties导入ObjectProperty
从kivymd.app导入MDApp
KV='''
:
滚动视图:
MDList:
OneLineListItem:
文本:“屏幕1”
新闻界:
root.nav\u drawer.set\u状态(“关闭”)
root.screen\u manager.current=“scr 1”
OneLineListItem:
文本:“屏幕2”
新闻界:
root.nav\u drawer.set\u状态(“关闭”)
root.screen\u manager.current=“scr 2”
屏幕:
MDToolbar:
id:工具栏
pos_提示:{“top”:1}
标高:10
标题:“测试”
左侧操作项:[[“菜单”,lambda x:nav\u抽屉。设置状态(“打开”)]]
导航布局:
x:toolbar.height
屏幕管理器:
屏幕:
名称:“scr 1”
滚动视图:
盒子布局:
方向:“垂直”
按钮:
文字:“你好”
按钮:
正文:“我希望”
按钮:
文字:“我可以”
按钮:
文本:“最终获得”
按钮:
正文:“这是工作”
屏幕:
名称:“scr 2”
MDLabel:
文本:“屏幕2”
哈利恩:“中心”
MDNavigationDrawer:
id:nav_抽屉
ContentNavigationDrawer:
屏幕管理器:屏幕管理器
导航抽屉:导航抽屉
'''
类内容导航抽屉(BoxLayout):
screen\u manager=ObjectProperty()
nav_drawer=ObjectProperty()
类TestNavigationDrawer(MDApp):
def生成(自):
返回生成器。加载字符串(KV)
TestNavigationDrawer().run()
以下代码的输出:
屏幕类是一个
RelativeLayout
,因此您必须像定位任何RelativeLayout
一样定位其子类。屏幕的每个子项
都会获得(1,1)
的默认大小提示
,以及(0,0)
的默认位置
,因此如果这不是您想要的,您必须对其进行调整。在您的情况下,NavigationLayout
将根据这些默认值完全覆盖屏幕。只需添加一个size\u hint\u y
,即可解决此问题,如下所示:
NavigationLayout:
x: toolbar.height
size_hint_y: 1.0 - toolbar.height/root.height
这将设置NavigationLayout
的大小,使其正好与MDToolbar
的底部相接,而不是覆盖它