Kivy:减少小部件之间的额外间距
Kivy: Reduce extra spacing between widgets
我有一个 Kivy 应用程序,它使用两行的 GridLayout。第一行包含一个带有项目列表的下拉按钮。第二行包含一个带有两个标签的 BoxLayout。
我注意到这两个小部件(下拉列表和标签)之间有很多 space。这是截图
我希望 "Left Label" 和 "Right Label" 直接显示在 "Select Hero" 按钮下方。我尝试使用 'anchor_x' 和 'anchor_y' 值,但它似乎不影响布局。
这是我的 main.py:
from kivy.app import App
from kivy.properties import ObjectProperty, StringProperty, ListProperty
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
class HeroScreen(Screen):
dropdown = DropDown()
dd_btn = ObjectProperty(None)
def __init__(self, **kwargs):
super(HeroScreen, self).__init__(**kwargs)
dropdown_list = [
'Ant Man',
'Batman',
'Cat Woman',
'Danger Mouse',
]
for hero in dropdown_list:
btn = Button(text=hero, size_hint_y=None, height=30)
btn.bind(on_release=lambda btn: self.say_hero(btn.text))
self.dropdown.add_widget(btn)
self.dd_btn = Button()
self.dd_btn.bind(
on_release=self.dropdown.open,
)
def say_hero(self, hero_name):
print "Hero: ", hero_name
class HeroApp(App):
screen_manager = None
def build(self):
self.screen_manager = ScreenManager(transition=NoTransition())
self.screen_manager.add_widget(HeroScreen(name='hero_screen'))
return self.screen_manager
if __name__ == "__main__":
HeroApp().run()
这是我的 hero.kv:
<HeroScreen>:
rows: 2
dd_btn: dd_btn_id
AnchorLayout:
anchor_x: 'left'
anchor_y: 'top'
BoxLayout:
size_hint_y: None
height: 30
orientation: 'horizontal'
BoxLayout:
size_hint_x: .4
Button:
id: dd_btn_id
text: 'Select Hero'
on_release: root.dropdown.open(self)
AnchorLayout:
anchor_x: 'left'
anchor_y: 'top'
BoxLayout:
orientation: "horizontal"
width: 400
size_hint_x: None
Label:
text: "Left Label"
font_size: "20dp"
Label:
text: 'Right Label'
font_size: "20dp"
让这两行看起来更靠近另一行的正确方法是什么?
小部件之间没有 space,只是标签的文本位于每个标签的中间(填充了整个垂直间隙)。
您可以通过多种方式解决这个问题。最好的可能取决于您以后还想更改什么,但一个简单的选择是手动将包含标签的 BoxLayout 的高度设置为更小的值,例如40.
我有一个 Kivy 应用程序,它使用两行的 GridLayout。第一行包含一个带有项目列表的下拉按钮。第二行包含一个带有两个标签的 BoxLayout。
我注意到这两个小部件(下拉列表和标签)之间有很多 space。这是截图
我希望 "Left Label" 和 "Right Label" 直接显示在 "Select Hero" 按钮下方。我尝试使用 'anchor_x' 和 'anchor_y' 值,但它似乎不影响布局。
这是我的 main.py:
from kivy.app import App
from kivy.properties import ObjectProperty, StringProperty, ListProperty
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
class HeroScreen(Screen):
dropdown = DropDown()
dd_btn = ObjectProperty(None)
def __init__(self, **kwargs):
super(HeroScreen, self).__init__(**kwargs)
dropdown_list = [
'Ant Man',
'Batman',
'Cat Woman',
'Danger Mouse',
]
for hero in dropdown_list:
btn = Button(text=hero, size_hint_y=None, height=30)
btn.bind(on_release=lambda btn: self.say_hero(btn.text))
self.dropdown.add_widget(btn)
self.dd_btn = Button()
self.dd_btn.bind(
on_release=self.dropdown.open,
)
def say_hero(self, hero_name):
print "Hero: ", hero_name
class HeroApp(App):
screen_manager = None
def build(self):
self.screen_manager = ScreenManager(transition=NoTransition())
self.screen_manager.add_widget(HeroScreen(name='hero_screen'))
return self.screen_manager
if __name__ == "__main__":
HeroApp().run()
这是我的 hero.kv:
<HeroScreen>:
rows: 2
dd_btn: dd_btn_id
AnchorLayout:
anchor_x: 'left'
anchor_y: 'top'
BoxLayout:
size_hint_y: None
height: 30
orientation: 'horizontal'
BoxLayout:
size_hint_x: .4
Button:
id: dd_btn_id
text: 'Select Hero'
on_release: root.dropdown.open(self)
AnchorLayout:
anchor_x: 'left'
anchor_y: 'top'
BoxLayout:
orientation: "horizontal"
width: 400
size_hint_x: None
Label:
text: "Left Label"
font_size: "20dp"
Label:
text: 'Right Label'
font_size: "20dp"
让这两行看起来更靠近另一行的正确方法是什么?
小部件之间没有 space,只是标签的文本位于每个标签的中间(填充了整个垂直间隙)。
您可以通过多种方式解决这个问题。最好的可能取决于您以后还想更改什么,但一个简单的选择是手动将包含标签的 BoxLayout 的高度设置为更小的值,例如40.