【问题标题】:How can you access the on_press handler of a nested button?如何访问嵌套按钮的 on_press 处理程序?
【发布时间】:2019-12-03 10:28:06
【问题描述】:

我目前正在设计一个 Kivy 应用程序,我想在其中使尽可能多的组件可重用。我有一些遵循以下风格的代码。

<ListButtonGroup@BoxLayout>:
    orientation: 'vertical'
    spacing: 10

    up: up
    down: down
    list: list

    BoxLayout:
        orientation: 'horizontal'
        size_hint: 1.0, None

        Button:
            id: up
            text: 'up'
            size_hint: 1.0, None
            height: 50
        Button:
            id: down
            text: 'down'
            size_hint: 1.0, None
            height: 50

    ScrollList:
        id: list
        size_hint: 1.0, 0.8

我希望这个类在多个地方使用,但我不知道如何制作它,以便我可以将 on_press 处理程序分配给这些按钮,以便在多个不同区域使用该类以实现不同的目的和功能。

【问题讨论】:

    标签: python python-3.x kivy kivy-language


    【解决方案1】:

    你可以像这样使用一些属性:

    <ListButtonGroup@BoxLayout>:
        orientation: 'vertical'
        spacing: 10
    
        up: up
        down: down
        list: list
    
        callback1: lambda: None
        callback2: lambda: None
    
        BoxLayout:
            orientation: 'horizontal'
            size_hint: 1.0, None
    
            Button:
                id: up
                text: 'up'
                size_hint: 1.0, None
                height: 50
                on_press: root.callback1()
            Button:
                id: down
                text: 'down'
                size_hint: 1.0, None
                height: 50
                on_press: root.callback2()
    
        ScrollList:
            id: list
            size_hint: 1.0, 0.8
    

    之后你只需使用:

    ListButtonGroup
        callback1: lambda x: print("1")
        callback2: lambda x: print("2")
    

    【讨论】:

    • 啊哈,这与我预期它的工作方式相反(以为你会导出按钮,而不是导入回调),但看起来像我需要的。如果可行,我会尝试并接受。
    • @adzy2k6 编辑了答案,因为我忘记了lambda(您也可以使用partial
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多