首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向Kivy布局中添加多个按钮

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

Stack Overflow用户
提问于 2021-01-12 13:57:41
回答 1查看 24关注 0票数 0

我试着用Kivy制作一个音乐播放器,它只有两个按钮,一个用于播放,另一个用于暂停。当我试图将一个函数绑定到按钮时,当我按下按钮时,我会得到错误。在搜索这个自己的站点时,有人建议使用来自partial库的functools函数。但即使这样也没用。我的密码在下面。

代码语言:javascript
复制
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: 0x000001D1D4792CF0>的

并通过使用部分函数

代码语言:javascript
复制
        self.play.bind(on_press=partial(self.play))
        self.pause.bind(on_press=partial(self.pause))

我得到了这个

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 14:27:15

代码中有两个错误。第一个问题是,您已经给事件处理程序和按钮赋予了相同的名称。所以换一个吧。其次,在使用参数调用事件处理程序时,需要第二个参数。

以下是您的更正代码:

代码语言:javascript
复制
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函数。就像这样:

代码语言:javascript
复制
self.play.bind(on_press=lambda _:self.play1())
self.pause.bind(on_press=lambda _:self.pause1())

在这种情况下,您可以在均衡器中删除额外的参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65685404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档