Как заставить Kivy ActionBar Button что-то делать при нажатии? - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь создать строку меню, и кнопка должна выполнять какую-то функцию.
EDITED
Это то, что я пробовал:

from kivy.app import App
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.core.window import Window
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.actionbar import *
from kivy.properties import ObjectProperty

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

class TetraApp(App):


    def build(self):
        Window.size=(875,575)
        Window.clearcolor = (0, 0, 0, 1)
        #Window.borderless=True
        #return Label(text="Hello Kivy!")
        return TitleBar()
    def updater(self):
        return Label(text='Hello')
if __name__=='__main__':
    app=TetraApp()
    app.run()

Запуск на Python 3.7.5 Windows 10
Теперь все работает Кнопка Ярлык не печатается. На нем нет ошибок, но ярлык не отображается. Что я сделал не так?

Ответы [ 2 ]

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

Если вы хотите отобразить метку, вы должны добавить ее в свой макет, используя: add_widget(). Так что в вашем случае это будет add_widget(Label(text='Hello')). Но вам все равно нужно указать, к чему вы хотите добавить виджет, поэтому вам нужно сослаться на FloatLayout, так как вы хотите добавить его туда. Поэтому я думаю, что лучше поместить ваш метод обновления в класс Titlebar, а затем сделать так:

class TitleBar(FloatLayout):

    def updater(self):
        self.add_widget(Label(text='Hello'))

Затем вам также следует изменить on_press: app.updater() на on_press: root.updater().

Позвольте мне знать, если это работает.

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

Я модифицировал метод

def updater(self):
        return self.root.add_widget(Label(text='Hello'))
...