在下面的代码中,当我点击标签时,菜单按钮从屏幕上消失。我该如何解决这个问题?
我在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()
答案 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()