单击标签时,菜单按钮消失

When I click on a label, the menu button disappears

在下面的代码中,当我单击标签上的 时,菜单按钮从屏幕上消失。我该如何解决?

我在 windows 10 上尝试这个,使用 kivy 1.9.2dev。

代码只是创建了一个屏幕管理器,然后添加了两个屏幕。然后添加垂直和水平框布局。

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.dropdown import DropDown
from kivy.lang import Builder

Builder.load_string('''
<TheScreenManager>:
    Screen1:

<Screen1>:
    name: 'screen1'
    BoxLayout:
        orientation: 'vertical'
        BoxLayout: # Menu
            size_hint_y: None
            orientation: 'horizontal'
            height: 48

            DropDown1:


        Label: 
            id: label
            text: 'I am a label'
            font_size: 30
            size_hint_y: 0.99


<DropDown1>:
    Button:
        id:btn1
        text: 'btn1'
        on_release: dropdown1.open(self)
        size_hint_y: None
        height: '48dp'

    DropDown:
        id: dropdown1
        on_parent: self.dismiss()
        on_select: btn1.text = '{}'.format(args[1])

        Button:
            text: 'My first Item'
            size_hint_y: None
            height: 44
            on_release: dropdown1.select('item1')


''')


class Screen1(Screen):
    pass


class DropDown1(DropDown):
    pass

class DropDown2(DropDown):
    pass


class EraserDropDown(DropDown):
    pass


class Screen2(Screen):
    pass


class TheScreenManager(ScreenManager):
    pass


class TheApp(App):
    def build(self):
        return TheScreenManager()


TheApp().run()

这里的问题是,您在 classes 中继承了 DropDown。您正在 kvlang 中的 class 中创建另一个 DropDown。
尝试继承 BoxLayout。这应该可以解决您的问题。
像这样:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

Builder.load_string('''
<TheScreenManager>:
    Screen1:

<Screen1>:
    name: 'screen1'
    BoxLayout:
        orientation: 'vertical'
        BoxLayout: # Menu
            size_hint_y: None
            orientation: 'horizontal'
            height: 48

            DropDown1:


        Label: 
            id: label
            text: 'I am a label'
            font_size: 30
            size_hint_y: 0.99


<DropDown1>:
    Button:
        id:btn1
        text: 'btn1'
        on_release: dropdown1.open(self)
        size_hint_y: None
        height: '48dp'

    DropDown:
        id: dropdown1
        on_parent: self.dismiss()
        on_select: btn1.text = '{}'.format(args[1])

        Button:
            text: 'My first Item'
            size_hint_y: None
            height: 44
            on_release: dropdown1.select('item1')


''')


class Screen1(Screen):
    pass


class DropDown1(BoxLayout):
    pass

class Screen2(Screen):
    pass


class TheScreenManager(ScreenManager):
    pass


class TheApp(App):
    def build(self):
        return TheScreenManager()


TheApp().run()