MDLabel堆叠在一个地方(一个在另一个地方)

时间:2019-09-04 19:08:16

标签: python android python-3.x kivy kivy-language

BoxLayout中的多个MDLabel(由AnchorLayout包含)存在一些问题,因此所有MDLabel对象都堆叠在屏幕上的一个位置!

我不知道如何使它们像列表一样居中和分组(带有空格和例如)

请帮我解决这个问题! 非常感谢,对不起,英语不好。

有我的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()

并且我的main.kv文件包含:

#: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'

1 个答案:

答案 0 :(得分:1)

糟糕,看起来像是一个简单的错误。您在KV Lang上的缩进不正确。您没有将标签正确嵌套到BoxLayout中。

09-04 14:54:44.717  9394  9394 E AndroidRuntime: FATAL EXCEPTION: main
09-04 14:54:44.717  9394  9394 E AndroidRuntime: java.lang.BootstrapMethodError: Exception from call site #3 bootstrap method
09-04 14:54:44.717  9394  9394 E AndroidRuntime:     at androidx.biometric.BiometricFragment.<init>(BiometricFragment.java:86)
09-04 14:54:44.717  9394  9394 E AndroidRuntime:     at androidx.biometric.BiometricFragment.newInstance(BiometricFragment.java:187)
09-04 14:54:44.717  9394  9394 E AndroidRuntime:     at androidx.biometric.BiometricPrompt.authenticateInternal(BiometricPrompt.java:681)
09-04 14:54:44.717  9394  9394 E AndroidRuntime:     at androidx.biometric.BiometricPrompt.authenticate(BiometricPrompt.java:658)