我有一个嵌套在BoxLayout小部件中的ActionBar。我希望ActionBar出现在屏幕的最顶端。目前,我只能让它出现在最底层。这是一个截图:
这是我的main.py:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class ShowActionBar(BoxLayout):
pass
class MyTestApp(App):
pass
if __name__ == "__main__":
MyTestApp().run()
这是我的.kv文件:
ShowActionBar:
<ShowActionBar>:
orientation: "vertical"
BoxLayout:
pos_hint: {'top': 1}
orientation: "vertical"
ActionBar:
ActionView:
use_seperator: True
ActionPrevious:
title: "My Title"
with_previous: False
ActionOverflow:
ActionButton:
text: "Settings"
ActionButton:
text: "Log Out"
正如您所看到的,我尝试过播放pos_hint的各种值,但它似乎不会影响ActionBar的位置。我怀疑我错过了一些简单的东西。我需要做什么才能让ActionBar出现在窗口的最顶端?
答案 0 :(得分:2)
您的示例实际上有点过于简单 - 只要添加其他小部件,您就会获得正确的行为。例如,这是您的小部件的新规则:
<ShowActionBar>:
orientation: "vertical"
ActionBar:
ActionView:
use_seperator: True
ActionPrevious:
title: "My Title"
with_previous: False
ActionOverflow:
ActionButton:
text: "Settings"
ActionButton:
text: "Log Out"
Label:
text: 'the next widget added fills all the extra space'
text_size: self.size
halign: 'center'
valign: 'middle
请注意,我还删除了不必要的BoxLayout级别。
真正的问题是BoxLayout只有一个孩子时会忽略pos_hint。也许它算作一个bug,但最多只是一个小bug,因为它并不是真的打算处理一个固定大小的单个孩子 - 一个FloatLayout更适合这个。但是,一旦你添加了更多的孩子,BoxLayout可能就是你想要的。