繁体   English   中英

如何向 Kivy 布局添加多个按钮

[英]How to add mulitple buttons to a Kivy Layout

我正在尝试使用 Kivy 制作一个音乐播放器,它只有两个按钮; 一个用于播放,一个用于暂停。 当我尝试将 function 绑定到按钮时,当我按下按钮时,出现错误。 在搜索这个非常自己的网站后,有人建议使用functools库中的partial function。 但即使这样也没有用。 我的代码如下。

class Layout(FloatLayout):
    def __init__(self, **kwargs):
        super(Layout, self).__init__(**kwargs)

        self.size = Window.size

        self.play = Button(text="Play", size_hint=(0.25, 0.25), font_size=36,  background_color=color,
                           pos=(self.size[0]*(3/8), self.size[1]*(4/10)) )
        self.pause = Button(text="Pause", size_hint=(0.25, 0.25), font_size=36, background_color=color,
                            pos=(self.size[0]*(3/8), self.size[1]*(1/10)) )
        self.play.bind(on_press=self.play)
        self.pause.bind(on_press=self.pause)
        self.add_widget(self.play)
        self.add_widget(self.pause)


    def play(self):
        print("PLay")

    def pause(self):
        print("Pause")

这给出了这个错误

AssertionError: <kivy.uix.button.Button object at 0x000001D1D4792CF0> 不可调用

并通过使用部分 function

        self.play.bind(on_press=partial(self.play))
        self.pause.bind(on_press=partial(self.pause))

我得到了这个

TypeError:第一个参数必须是可调用的

您的代码中有两个错误。 第一个是您为事件处理程序和按钮指定了相同的名称。 所以改变其中之一。 其次,您需要事件处理程序的第二个参数,因为它使用参数调用。

这是您更正的代码:

class Layout(FloatLayout):
    def __init__(self, **kwargs):
        super(Layout, self).__init__(**kwargs)

        self.size = Window.size

        self.play = Button(text="Play", size_hint=(0.25, 0.25), font_size=36,
                           pos=(self.size[0]*(3/8), self.size[1]*(4/10)) )
        self.pause = Button(text="Pause", size_hint=(0.25, 0.25), font_size=36,
                            pos=(self.size[0]*(3/8), self.size[1]*(1/10)) )

        self.play.bind(on_press=self.play1)
        self.pause.bind(on_press=self.pause1)

        self.add_widget(self.play)
        self.add_widget(self.pause)


    def play1(self, instance):
        
        print("PLay")

    def pause1(self,  instance):

        print("Pause")

如果您不想添加参数,则可以使用 lambda function。 像这样的东西:

self.play.bind(on_press=lambda _:self.play1())
self.pause.bind(on_press=lambda _:self.pause1())

在这种情况下,您可以删除事件处理程序中的额外参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM