Dark Nocturne
Dark Nocturne

Reputation: 37

MDLabels stacked in one place (one above another)

I've some problems with multiple MDLabels in BoxLayout (that is contains by AnchorLayout), so all the MDLabel objects are stacked in one place on the screen!

I dont know how to make them centered and grouped like a list (with spacing and e.g.)

Please, help me with solving that problem! Thanks a lot and sorry for bad english.

There is my main.py

from kivy.app import App
from kivymd.theming import ThemeManager
from kivymd.label import MDLabel
from kivy.uix.screenmanager import Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.metrics import dp, sp, pt

def toast(text):
    from kivymd.toast.kivytoast import toast

    toast(text)

class MyScreen(Screen):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.menu_items = [
                {
                    "viewclass": "MDMenuItem",
                    "text": "text%d" % i,
                    "callback": self.callback,
                }
                for i in range(1, 3)
            ]

        self.menu_button = None

    def change_variable(self, value):
        print("\nvalue=", value)
        self.VARIABLE = value
        print("\tself.VARIABLE=", self.VARIABLE)

    def callback(self, *args):
        toast(args[0])

class MainApp(App):
    title = "KivyMD MDDropdownMenu Demo"
    theme_cls = ThemeManager()

    def build(self):
        return MyScreen()


if __name__ == "__main__":
    MainApp().run()

And there is my main.kv file contains:

#:import MDDropdownMenu kivymd.menus.MDDropdownMenu
#:import MDRaisedButton kivymd.button.MDRaisedButton
#:import MDLabel kivymd.label.MDLabel

<MDMenuItem>:
    on_release:
        app.root.change_variable(self.text)
        app.root.menu_button.text = self.text

<MyScreen>:
    name: 'myscrn'
    AnchorLayout:
        anchor_y: 'center'
        BoxLayout:
            orientation: 'vertical'
            size_hint: 0.1, 0.5
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
            spacing: dp(10)
            MDRaisedButton:
                id: mainbutton
                size_hint: None, None
                size: 3 * dp(48), dp(48)
                text: 'MDButton1'
                pos_hint: {'center_x': 0.5, 'center_y': 0.5}
                opposite_colors: True
                on_release:
                    root.menu_button = mainbutton
                    MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)
            MDRaisedButton:
                id: secondbutton
                size_hint: None, None
                size: 3 * dp(48), dp(48)
                text: 'MDButton2'
                pos_hint: {'center_x': 0.5, 'center_y': 0.5}
                opposite_colors: True
                on_release:
                    root.menu_button = secondbutton
                    MDDropdownMenu(items=root.menu_items, width_mult=4).open(self)
    AnchorLayout:
        anchor_y: 'top'
        BoxLayout:
            orientation: 'vertical'
            size_hint: 0.95, 0.5
            padding: [0, 0, 0, 0]
            spacing: dp(5)
            pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        MDLabel:
            font_size: dp(12)
            text: '123'
        MDLabel:
            font_size: dp(22)
            text: '456'

Upvotes: 0

Views: 613

Answers (1)

ahackit
ahackit

Reputation: 104

Woops, looks like a simple mistake. Your indentation on KV Lang is incorrect. You didn't nest your labels into BoxLayout correctly.

    AnchorLayout:
    anchor_y: 'top'
    BoxLayout:
        orientation: 'vertical'
        size_hint: 0.95, 0.5
        padding: [0, 0, 0, 0]
        spacing: dp(5)
        pos_hint: {'center_x': 0.5, 'center_y': 0.5}
        MDLabel:
            font_size: dp(12)
            text: '123'
        MDLabel:
            font_size: dp(22)
            text: '456'"""

Upvotes: 1

Related Questions