簡體   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