【问题标题】:How to make Kivy ActionBar Button do something on click?如何让 Kivy ActionBar Button 在点击时执行某些操作?
【发布时间】:2020-07-13 13:45:49
【问题描述】:

我正在尝试创建一个菜单栏,并且该按钮需要执行一些功能。
已编辑
这是我尝试过的:

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 上运行
现在它可以工作按钮标签未打印它不显示任何错误但标签未显示。我做错了什么?

【问题讨论】:

    标签: python python-3.x error-handling kivy


    【解决方案1】:

    我修改了方法

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

    【讨论】:

    • 这是一条完美的线!
    • 但是如何更改操作栏的宽度?
    【解决方案2】:

    当你想显示一个标签时,你应该使用以下方法将它添加到你的布局中: add_widget()。所以在你的情况下,它将是add_widget(Label(text='Hello'))。但是您仍然需要指定要添加小部件的内容,因此您需要引用 FloatLayout,因为您想将它添加到那里。所以我认为最好将你的 updater 方法放在 Titlebar 类中,然后这样做:

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

    您还应该将on_press: app.updater() 更改为on_press: root.updater()

    让我知道这是否有效。

    【讨论】:

    • 这个答案很完美
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多