简体   繁体   English

与 Kivy/KivyMD 接壤

[英]Border with Kivy/KivyMD

I am looking to add a border to the main screen of my application but I'm not sure how.我想在我的应用程序的主屏幕上添加边框,但我不确定如何添加。 I tried to take some tips from this question: Kivy-how can i make my canvas height smaller than the parent height But I can't seem to figure it out.我试图从这个问题中得到一些提示: Kivy-how can i make my canvas height smaller than the parent height但我似乎无法弄清楚。

The issue is that I am also using a KivyMD's Navigation Drawer, I would like the border be separate from the top bar, enclosing everything below the bar.问题是我也在使用 KivyMD 的导航抽屉,我希望边框与顶部栏分开,将栏下方的所有内容都包围起来。 Please let me know if I'm not being clear.如果我不清楚,请告诉我。

Here is some sample code that replicates my setup.这是一些复制我的设置的示例代码。

Perhaps I could add some random rectangles to act as a border?也许我可以添加一些随机矩形作为边框?

EDIT:编辑:

Okay almost there, I got the 'border' but I now need the size_hint added in the AnchorLayout to ignore the top portion of the screen where the menu bar is.好的,差不多了,我得到了“边框”,但我现在需要在size_hint中添加AnchorLayout以忽略菜单栏所在的屏幕顶部。 Here is the updated code.这是更新的代码。

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

from kivymd.app import MDApp

kv = '''
#:import hex kivy.utils.get_color_from_hex

NavigationLayout:
    canvas.before:
        Color:
            rgb: hex('#C0C0C0')
        Rectangle:
            size: self.size
            pos: self.pos
    ScreenManager:
        id: screen_manager
        Screen:
            name: "home_screen"
            BoxLayout:
                orientation: 'vertical'
                MDToolbar:
                    title: 'Name of the App!'
                    elevation: 10
                Widget:
            FloatLayout:

                orientation: 'vertical'
                AnchorLayout:
                    anchor_x: 'center'
                    anchor_y: 'center'
                    Widget:
                        canvas.before:
                            Color:
                                rgb: hex('#F5F5F5')
                            Rectangle:
                                size: self.size
                                pos: self.pos
                        size_hint: .95, .95
                MDLabel:
                    text: "Some More Text"
                    halign: "center"
                    color: 0,0,0,1
                    pos_hint: {"center_x": .5, "center_y": .75}
                    size_hint: .7, .1

    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            orientation: "vertical"
            padding: "8dp"
            spacing: "8dp"
            AnchorLayout:
                anchor_x: "left"
                size_hint_y: None
                height: avatar.height
                Image:
                    id: avatar
                    source: "image.jpg"
            MDLabel:
                text: "Text here"
                font_style: "Button"
                size_hint_y: None
                height: self.texture_size[1]
    '''
class ContentNavigationDrawer(BoxLayout):
    pass

class MyApp(MDApp):
    def build(self):
        return Builder.load_string(kv)


MyApp().run()


I think you will get what you want if you indent the FloatLayout so that it is in the BoxLayout .我认为如果您缩进FloatLayout以便它位于BoxLayout中,您将得到您想要的。 Like this:像这样:

#:import hex kivy.utils.get_color_from_hex

NavigationLayout:
    canvas.before:
        Color:
            rgb: hex('#C0C0C0')
        Rectangle:
            size: self.size
            pos: self.pos
    ScreenManager:
        id: screen_manager
        Screen:
            name: "home_screen"
            BoxLayout:
                orientation: 'vertical'
                MDToolbar:
                    title: 'Name of the App!'
                    elevation: 10
                # Widget:  # not needed
                FloatLayout:

                    orientation: 'vertical'
                    AnchorLayout:
                        anchor_x: 'center'
                        anchor_y: 'center'
                        Widget:
                            canvas.before:
                                Color:
                                    rgb: hex('#F5F5F5')
                                Rectangle:
                                    size: self.size
                                    pos: self.pos
                            size_hint: .95, .95
                    MDLabel:
                        text: "Some More Text"
                        halign: "center"
                        color: 0,0,0,1
                        pos_hint: {"center_x": .5, "center_y": .75}
                        size_hint: .7, .1

    MDNavigationDrawer:
        id: nav_drawer
        ContentNavigationDrawer:
            orientation: "vertical"
            padding: "8dp"
            spacing: "8dp"
            AnchorLayout:
                anchor_x: "left"
                size_hint_y: None
                height: avatar.height
                Image:
                    id: avatar
                    # source: "image.jpg"
                    source: 'tester.png'
            MDLabel:
                text: "Text here"
                font_style: "Button"
                size_hint_y: None
                height: self.texture_size[1]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM