[英]How do I add buttons that are dynamically created in pure python to a kivy layout that is Written in Kivy Language?
[英]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.