Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用kivymd和python在新屏幕上创建扩展面板

使用kivymd和python在新屏幕上创建扩展面板
EN

Stack Overflow用户
提问于 2022-08-10 13:27:02
回答 1查看 190关注 0票数 0

我已经创建了两个屏幕的代码,并需要其中一个有一个扩展面板。不幸的是,我无法让面板显示其中的内容。相反,我脑子里的混乱和偏头痛的一面,所以这是我的代码,一个例子,我希望它的样子,以及我设法创建了减去我的全部代码。

视频示例:https://www.kapwing.com/videos/62f4074bafd00100c829b84c

视频问题示例:https://www.kapwing.com/videos/62f41c828f6acd00521caae1

如视频示例所示:

第一码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen
from kivymd.uix.expansionpanel import MDExpansionPanel
from kivymd.uix.expansionpanel import MDExpansionPanelOneLine
from kivymd.uix.boxlayout import MDBoxLayout

KV = '''
MDScreen:

    MDNavigationLayout:

        ScreenManager:
            id: manager

            MDScreen:
                name: 'Home'

                AnchorLayout:
                    anchor_x: "center"
                    anchor_y: "top"
                    MDToolbar:
                        md_bg_color: 0, 0, 0, 0.5
                        title: "Example"
                        elevation: 10
                        left_action_items: [["menu", lambda x: mud_list.set_state("open")]]
                        right_action_items: [["dots-vertical", lambda x:app.dropdown(x)]]

                MDNavigationDrawer:
                    id: mud_list

                    BoxLayout:
                        orientation: 'vertical'
                        spacing: '5dp'
                        padding: '5dp'

                        ScrollView:
                            MDList:
                                OneLineIconListItem:
                                    text: '[Settings]'
                                    on_release:
                                        manager.current = 'Settings'
                                        root.ids.mud_list.set_state(new_state='toggle', animation=True)
                                    divider: None
                                    IconLeftWidget:
                                        icon: 'cog'
                                        on_release:
                                            manager.current = 'Settings'
                                            root.ids.mud_list.set_state(new_state='toggle', animation=True)       

                        MDLabel:
                            text:' By Author'
                            size_hint_y: None
                            font_style: 'Button'
                            height: self.texture_size[1]

            MDScreen:
                name: 'Settings'

                AnchorLayout:
                    anchor_x: "center"
                    anchor_y: "top"

                    MDToolbar:
                        id: mdt_color
                        md_bg_color: 1, 1, 1, 1
                        elevation: 10

                MDIconButton: 
                    icon: "keyboard-backspace"
                    pos_hint: {"center_x": 0.09, "center_y": 0.945}
                    on_release: manager.current = 'Home'

                MDBoxLayout:
                    size_hint: 1, 0.89
                    orientation : 'vertical'    
                    ScrollView:
                        MDBoxLayout:
                            orientation:'vertical'
                            adaptive_height: True
                            padding:[dp(15),dp(15),dp(15),dp(35)]
                            spacing:dp(15)

                            Content
                                adaptive_height: True
                                orientation: 'vertical'

                                OneLineIconListItem:
                                    text: "Dark"
                                    on_release:app.theme_changer2()
                                    divider: None
                                    IconLeftWidget:
                                        icon: 'weather-night'
                                        on_release:app.theme_changer2()

                                OneLineIconListItem:
                                    text: "Light"
                                    on_release:app.theme_changer()
                                    divider: None
                                    IconLeftWidget:
                                        icon: 'white-balance-sunny'
                                        on_release:app.theme_changer()

                            ScrollView:
                                MDGridLayout:
                                    id: box
                                    cols: 1
                                    adaptive_height: True
'''


class Content(MDBoxLayout):
    """Custom content."""

    def __draw_shadow__(self, origin, end, context=None):
        pass


class MainApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.menu = None
        self.menu_list = None
        self.kvs = Builder.load_string(KV)
        self.screen = Builder.load_string(KV)

    def on_start(self):
        self.root.ids.box.add_widget(
            MDExpansionPanel(
                icon="theme-light-dark",
                content=Content(),
                panel_cls=MDExpansionPanelOneLine(
                    text="Theme",
                )
            )
        )

    def theme_changer(self):
        self.theme_cls.theme_style = "Light"
        self.root.ids.mdt_color.md_bg_color = [1, 1, 1, 1]

    def theme_changer2(self):
        self.theme_cls.theme_style = "Dark"
        self.root.ids.mdt_color.md_bg_color = [0, 0, 0, 1]

    def build(self):
        self.theme_cls.theme_style = "Light"
        screen = Screen()
        screen.add_widget(self.kvs)
        return self.screen


ma = MainApp()
ma.run()

第二个代码:我从这里的kivymd文档获得的https://github.com/kivymd/KivyMD/wiki/Components-Expansion-Panel

第3段代码与第2段代码基本相同,但我自己编写了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.expansionpanel import MDExpansionPanel, MDExpansionPanelOneLine

KV = '''
<Content>
    adaptive_height: True
    orientation: 'vertical'

    OneLineIconListItem:
        text: "Dark"
        divider: None
        IconLeftWidget:
            icon: 'weather-night'
            
    OneLineIconListItem:
        text: "Light"
        divider: None
        IconLeftWidget:
            icon: 'white-balance-sunny'


ScrollView:

    MDGridLayout:
        id: box
        cols: 1
        adaptive_height: True
'''


class Content(MDBoxLayout):
    """Custom content."""

    def __draw_shadow__(self, origin, end, context=None):
        pass


class Test(MDApp):
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        self.root.ids.box.add_widget(
            MDExpansionPanel(
                icon="theme-light-dark",
                content=Content(),
                panel_cls=MDExpansionPanelOneLine(
                    text="Theme",
                )
            )
        )


Test().run()

我的问题是,在问题视频的例子中,扩展面板本身没有出现。

我正在弄明白这一点,所以在我尝试过的所有混乱中,我注意到“内容”的位置以及与屏幕‘设置’的锚布局有关的所有内容,导致面板出现,但内容不在里面。

与"content“或"MDGridlayout”是否具有id: box的效果相同。

总之,我希望能够在我的主应用程序的设置屏幕中创建类似于第2段代码的内容,或者将第3段代码复制并粘贴到我的主应用程序中。

哦,我以后可能会自己问这个问题,但是如果够简单的话,我该怎么做呢?当主题被改变时,它变成了默认的?

EN

回答 1

Stack Overflow用户

发布于 2022-10-06 02:57:35

花了一段时间,但在我的帮助下,我终于得到了。下面是一个示例,我认为这是代码#Comments#中的一些关键注释。

希望这能帮上忙。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from kivymd.app import MDApp
from kivy.lang import Builder
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.expansionpanel import MDExpansionPanel, MDExpansionPanelOneLine

KV = '''

#THE CONTENT GOES ABOVE EVERYTHING ELSE EVEN THE 1ST SCREEN.#
#IT IS REFERENCED LATER IN WHICH EVER SCREEN IT IS TO APPEAR USING MDGridLayout AND A def LATER ON#

#It should also always have these angle brackets <>#

<Content>
    size_hint_y: None
    height: self.minimum_height
    orientation: 'vertical'

    OneLineIconListItem:
        text: 'Dark theme'
        on_release:app.theme_changer2()
        divider: None
        IconLeftWidget:
            icon: 'weather-night'
            on_release:app.theme_changer2()

    OneLineIconListItem:
        text: 'Light theme'
        on_release:app.theme_changer()
        divider: None
        IconLeftWidget:
            icon: 'white-balance-sunny'
            on_release:app.theme_changer()

<Content2>
    size_hint_y: None
    height: self.minimum_height
    orientation: 'vertical'

    OneLineIconListItem:
        text: 'I try to explain what i think are key points to note'
        on_release:app.theme_changer2()
        divider: None
        IconLeftWidget:
            icon: 'weather-night'
            on_release:app.theme_changer2()

    OneLineIconListItem:
        text: 'Hope this helps someone else'
        on_release:app.theme_changer()
        divider: None
        IconLeftWidget:
            icon: 'white-balance-sunny'
            on_release:app.theme_changer()

MDScreen:

    MDNavigationLayout:

        ScreenManager:
            id: manager

            MDScreen:
                name: 'Home'

                #The location of this MDGridLayout shows it appears in the 1st screen.#

                MDGridLayout:
                    cols: 1
                    adaptive_height: True

                    #This id is used to reference what content goes to which expansion panel#

                    id: box2

                MDRaisedButton:
                    pos_hint: {"center_x": 0.5, "center_y": 0.5}
                    text: "PRESS ME"
                    on_release: manager.current = 'Home2'

            MDScreen:
                name: 'Home2'

                MDBoxLayout:
                    orientation: "vertical"

                    MDToolbar:
                        id: mdt_color
                        elevation: 10

                    ScrollView:
                        divider: 'None'

                        #The location of this MDGridLayout shows it appears in the 2nd screen.#

                        MDGridLayout:
                            cols: 1
                            adaptive_height: True
                            id: box

                MDIconButton:
                    pos_hint: {"center_x": 0.05, "center_y": 0.945}
                    icon: "keyboard-backspace"
                    on_release: manager.current = 'Home'

'''


# Every expansion panel should have a class corresponding to it's name e.g.#


class Content(MDBoxLayout):
    pass


# The class name is referenced in the contents= section below#


class Content2(MDBoxLayout):
    pass


class MainApp(MDApp):
    def theme_changer(self):
        self.theme_cls.theme_style = "Light"
        self.root.ids.mdt_color.md_bg_color = [1, 1, 1, 1]

    def theme_changer2(self):
        self.theme_cls.theme_style = "Dark"
        self.root.ids.mdt_color.md_bg_color = [0, 0, 0, 1]

    def build(self):
        return Builder.load_string(KV)

    def on_start(self):

        # Here you see the id box used#

        self.root.ids.box.add_widget(
            MDExpansionPanel(
                icon="theme-light-dark",

                # Here the content name Content is referenced in content=#

                content=Content(),
                panel_cls=MDExpansionPanelOneLine(
                    text="Theme",
                )
            )
        )

        # Here you see the id box2 used#

        self.root.ids.box2.add_widget(
            MDExpansionPanel(
                icon="theme-light-dark",

                # Here the content name Content2 is referenced in content=#

                content=Content2(),
                panel_cls=MDExpansionPanelOneLine(
                    text="Read the code #comments# for details",
                )
            )
        )


ma = MainApp()
ma.run()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73312902

复制
相关文章
SQL--动态列名
前几天遇到一个问题,就是查询时,列名是不固定的,是动态的,是一个传递过来的变量,简写如下:
IT云清
2019/01/22
2.4K0
ArcMap将栅格0值设置为NoData值的方法
  本文介绍在ArcMap软件中,将栅格图层中的0值或其他指定数值作为NoData值的方法。
疯狂学习GIS
2023/06/26
6020
ArcMap将栅格0值设置为NoData值的方法
JVM的Xms和Xmx参数设置为相同值有什么好处?
最近正在重新学习JVM的内存结构及相关优化内容,无意中看到IDEA的VM配置(安装时默认配置)中有如下的配置:
程序新视界
2020/09/10
20.6K1
@RequestParam 接收参数的值为null处理
@RequestMapping(value = “/test”) public String test( @RequestParam(value = “profit”,required = false,defaultValue = “0”) int profit){ System.out.println(“profit:”+profit); return “success”; } 第一种处理方式(如上图):defaultValue请求参数的默认值,一般和 required = false 一起使用
kirin
2021/03/25
3.3K0
swagger中参数为数组dataType的设置
swagger中参数为数组dataType的设置
Java架构师必看
2021/09/22
3.5K0
swagger中参数为数组dataType的设置
怎样将Anaconda设置为国内的镜像
“ Anaconda是世界上最流行的数据分析平台(它们官网自己吹的nb),如果把镜像改为国内的可以节省很多时间。”
讲编程的高老师
2020/08/14
7.4K1
java中给方法的参数设置默认值,java设置可选参数
今天在调整一个定时任务时需要将固定写死的查询日期通过外部传参来控制,如果没有传值给个默认值,于是了解了下java函数的参数默认值
高久峰
2023/06/29
7.8K0
SQL Server重置自增的值为0
提出问题: 随时测试的越多,自增的ID就越大,那么就要想办法进行恢复成初始的状态了。
手撕代码八百里
2020/07/28
1.8K0
SQL Server重置自增的值为0
为什么禁止把函数参数默认值设置为可变对象?
有时候我们在编写函数时,会需要给一些参数设置默认值,这个时候我们需要牢记一点:禁止使用可变对象作为参数默认值。
活用数据
2022/10/04
1.3K0
为字段设置初始值
在开发中为字段设置初始值这是最基本的要求,但是很多开发人员会在构造函数变多的时候忘记给成员变量设置初始值。为了避免这个问题,我们最好在声明的时候直接初始化,而不是在实现构造函数的时候去初始化。编译器会帮助开发人员在每个构造函数开头放入一段代码,这段代码会把开发人员在定义成员字段时所指定的初始值设置给这些成员字段。如果没有显示定义构造函数,那么编译器就会先创建默认构造函数,之后再向其中加入初始化代码。
喵叔
2020/09/08
1.6K0
ES6函数参数的默认值设置
在ES6(ECMAScript 2015)中,我们可以为函数参数设置默认值,这使得函数在调用时可以接受一部分或全部参数的默认值。默认参数值的设置提供了更灵活和方便的函数使用方式。
堕落飞鸟
2023/05/22
1.5K0
idea 设置导入包不带*
点开file->Settings,搜索java,在Code style里面找到imports选项,设置导入类数值阈值,默认同包类是超过5个变成*,静态导入超过3个变成*,这里我们改成10个,最好是公司统一,不然很烦。。。实在不想见到*就改成很大的数值,比如999,设置完成之后最上面选的scheme是default,对所有项目都生效。
全栈程序员站长
2021/05/19
2.2K0
将 Vim 设置为 Rust IDE
Rust 语言旨在以 C++ 开发人员熟悉的方式实现具有安全并发性和高内存性能的系统编程。它也是 Stack Overflow 的 2019 年开发人员调查中最受欢迎的编程语言之一。
用户8639654
2021/09/15
1.8K0
Javascript设置函数参数默认值[ ES6/ES2015总结]
对于js设置函数参数默认值对于绝大多数小伙伴来说,那可以说是相当的简单的,在ES6/ES2015中语法很简单,但是有一些浏览器是不兼容的ES6/ES2015的,或许大家会说我们可以使用babel来编译支持低版本浏览器。
IT工作者
2022/01/26
1.7K0
为什么不带参数的 Math.max() 返回-Infinity
Math.max() 是 JS 内置的方法,可以从传入的参数中,返回最大的一个。例如:
前端小智@大迁世界
2022/06/15
1K0
MyBatis 多参数综合查询的动态 SQL 实现示例
List<QualityDataOfAppDto> findQualityDataOfAppDtoByDeptNoAndAoneProductId( @Param("deptNo") Long deptNo, @Param("aoneProductId") Long aoneProductId); <select id="findQualityDataOfAppDtoByDeptNoAndAoneProductId" r
一个会写诗的程序员
2018/08/17
8300
kubernetes中为容器设置内核参数
注意:此方式如果使用了非安全内核参数,必须要先修改节点的kubelet配置,增加--allowed-unsafe-sysctls字段,并允许相关非安全参数,否则创建后,pod会报错SysctlForbidden,并大量不断创建pod,可能将集群搞挂
铜锣烧
2022/12/09
1.7K0
【原创】SQLServer将数据导出为SQL脚本的方法
        最近很多同学问到一个问题,如何将MSSQLServer的数据库以及里面的数据导出为SQL脚本,主要问的是MSSQLServer2000和2005,因为2008的管理器已经有了这个功能,2000和2005则没有。
流柯
2018/08/30
2.1K0
【原创】SQLServer将数据导出为SQL脚本的方法
java.sql.SQLException: 列名无效
在进行jdbc操作时,出现了如下图的bug: 错误原因:在执行sql语句后,进行遍历,但是取值与数据库中的列名不一致。 主要是因为字段名错误,如下,本来应该从数据库中取emp表中的realName字段
时间静止不是简史
2020/07/24
2.7K0
java.sql.SQLException: 列名无效
点击加载更多

相似问题

在nodejs中将数据写入json文件

12

在nodeJS中将结果写入csv文件

30

NodeJS:将js对象写入文件并进行导出

125

在nodejs中将数组写入CSV

173

在nodejs中包括对象

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文