Почему Kivy ActionBar не работает должным образом? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытался создать панель действий, используя идеи для примеров kivy pingball и action bar.
Это мой код:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.core.window import Window

Builder.load_string("""
<TitleBar>:
    ActionBar:
        pos_hint: {'top':1}
        ActionView:
            use_separator: True
            ActionPrevious:
                title: 'Action Bar'
                with_previous: False
            ActionOverflow:
            ActionButton:
                icon: 'atlas://data/images/defaulttheme/audio-volume-high'
            ActionButton:
                important: True
                text: 'Important'
            ActionButton:
                text: 'Btn2'
            ActionButton:
                text: 'Btn3'
            ActionButton:
                text: 'Btn4'
            ActionGroup:
                text: 'Group1'
                ActionButton:
                    text: 'Btn5'
                ActionButton:
                    text: 'Btn6'
                ActionButton:
                    text: 'Btn7'
""")
class TitleBar(Widget):
    pass
class TrialApp(App):

    def build(self):
        Window.size=(875,575)
        Window.borderless=True
        return TitleBar()

TrialApp().run()

Почему ActionBar идет ко дну, несмотря на использование pos_hint: {'top':1}?
Python 3.7.5 Windows 10

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

root Widget вашего App - это простой Widget, который не предназначен для использования в качестве контейнера и не поддерживает такие вещи, как pos_hint. Попробуйте изменить:

class TitleBar(Widget):

на

class TitleBar(FloatLayout):

Это сделает ваш root Widget a FloatLayout, который будет обрабатывать pos_hint.

0 голосов
/ 01 апреля 2020

Когда вы читаете документы kivy.uix.actionbar , вы получаете это вместо Widget, вам нужно использовать FloatLayout.
Таким образом, код должен быть:

from kivy.uix.floatlayout import FloatLayout
class TitleBar(FloatLayout):
    pass
...