我试着用Kivy制作一个音乐播放器,它只有两个按钮,一个用于播放,另一个用于暂停。当我试图将一个函数绑定到按钮时,当我按下按钮时,我会得到错误。在搜索这个自己的站点时,有人建议使用来自partial库的functools函数。但即使这样也没用。我的密码在下面。
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>的
并通过使用部分函数
self.play.bind(on_press=partial(self.play))
self.pause.bind(on_press=partial(self.pause))我得到了这个
TypeError:第一个参数必须是可调用的
发布于 2021-01-12 14:27:15
代码中有两个错误。第一个问题是,您已经给事件处理程序和按钮赋予了相同的名称。所以换一个吧。其次,在使用参数调用事件处理程序时,需要第二个参数。
以下是您的更正代码:
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函数。就像这样:
self.play.bind(on_press=lambda _:self.play1())
self.pause.bind(on_press=lambda _:self.pause1())在这种情况下,您可以在均衡器中删除额外的参数。
https://stackoverflow.com/questions/65685404
复制相似问题