python - Kivy - 如何在不同的文件中分屏?
问题描述
我在将 kv 文件包含到另一个文件时遇到问题。我想为每个屏幕设置单独的文件并将它们包含在“main.kv”中,但是我对拆分文件中的访问标识/组件有疑问。
见错误:
文件“screen_home.kv”,第 9 行,在 left_action_items: [['menu', lambda x: nav_drawer.set_state("open")]] NameError: name 'nav_drawer' is not defined
查看包含的文件:
主文件
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
class ContentNavigationDrawer(BoxLayout):
pass
class mainApp(MDApp):
title = "mainApp"
app_name = title
def build(self):
return Builder.load_file("main.kv")
if __name__ == "__main__":
mainApp().run()
主文件
#:include screen_home.kv
<ContentNavigationDrawer>:
orientation: "vertical"
padding: "8dp"
spacing: "8dp"
AnchorLayout:
anchor_x: "center"
size_hint_y: None
height: app_logo.height
Image:
id: app_logo
size_hint: None, None
size: "80dp", "80dp"
source: "./res/images/logo.png"
MDLabel:
text: app.app_name
halign: "center"
font_style: "Subtitle2"
size_hint_y: None
height: self.texture_size[1]
ScrollView:
MDList:
OneLineAvatarIconListItem:
text: "Home"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen_home"
IconLeftWidget:
icon: "home"
valign: 'center'
OneLineAvatarIconListItem:
text: "Screen 1"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen_1"
IconLeftWidget:
icon: "scatter-plot"
Screen:
NavigationLayout:
ScreenManager:
id: screen_manager
ScreenHome:
Screen:
name: "screen_1"
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: "First Screen"
elevation: 10
left_action_items: [['menu', lambda x : nav_drawer.set_state("open")]]
BoxLayout:
orientation: 'horizontal'
MDLabel:
halign: "center"
valign: "center"
text: "Label on screen_1"
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
screen_home.kv
<ScreenHome@Screen>:
name: "screen_home"
BoxLayout:
orientation: 'vertical'
MDToolbar:
title: "Home"
elevation: 10
left_action_items: [['menu', lambda x: nav_drawer.set_state("open")]]
Widget:
canvas:
Color:
rgb: 0, 1, 0
Rectangle:
size: (800,200)
Widget:
MDLabel:
text: "Home screeen"
size: root.width, root.height
halign: 'center'
valign: 'center'
解决方案
推荐阅读
- sql - 如何仅使用日期字段计算唯一的每日和每周发布日期?
- python - 如何避免蜘蛛(网络爬虫)爬取已经爬过的网站?
- android - Android Camera2 应用程序在离开相机活动并重新进入后中断
- jquery - 媒体查询中的 jQuery 函数未按预期触发
- c# - 导航返回后如何刷新页面。不调用 OnAppearing
- php - Symfony 注册表单没有保存到 Doctrine
- c# - 日期时间选择器和月历改变外观
- c++ - 程序在我的 C++ 工作区中找不到头文件
- amazon-web-services - 是否有计算红移年、月和日日期差异的函数?
- macos - 从 Perl 脚本打开新终端窗口并执行 SSH 命令