当我点击标签时,菜单按钮消失

时间:2017-02-26 23:52:50

标签: python kivy kivy-language

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

我在Windows 10上尝试使用kivy 1.9.2dev。

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

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()

1 个答案:

答案 0 :(得分:0)

这里的问题是,你在类中继承了DropDown。而你正在kvlang中创建该类中的另一个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()