简体   繁体   English

Python、Kivy 中多个按钮的循环

[英]Loop for multiple buttons in Python, Kivy

I have creating multiple buttons via for loop in Python/Kivy.我在 Python/Kivy 中通过 for 循环创建了多个按钮。 I can't figureout how to implement for each button on_press and on_release function, so each button (having it's defined color) will come back to its original color after releasing.我不知道如何为每个按钮 on_press 和 on_release function 实现,所以每个按钮(具有定义的颜色)在释放后都会恢复到原来的颜色。

Below You will find part of code in python and kivy.下面你会在 python 和 kivy 中找到部分代码。

Python: Python:

class PrButton(GridLayout):

def __init__(self, **kwargs):
    super(PrButton, self).__init__(**kwargs)
    self.build_grid()

def build_grid(self):
    for i in hi_cat():
        btn = ButtonDD(text=i[0].upper())
        btn.background_color = i[1]
        self.ids[i[0]] = btn
        self.add_widget(btn)

kivy file: kivy 档案:

<ButtonDD>
bold: True
from kivymd.app import MDApp 
from kivy.lang import Builder 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.button import Button 


KV = """
<MainWidget>:
    size : root.size 
    
 
"""


class MainWidget(BoxLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        
        for i in range(5):
            
            btn = Button(text = str(i))
            btn.bind(on_release = lambda i=i:self.clicked(i))
            self.add_widget(btn)
            
    
    def clicked(self,text):
        print(text)

class MainApp(MDApp):
    def build(self):
        
        Builder.load_string(KV)
    
        return MainWidget()

MainApp().run()

It is achieved by changing lambda x: self.clicked() To lambda i=i:self.clicked()通过将lambda x: self.clicked() lambda i=i:self.clicked()来实现

I've been stuck with this kind of problem for some time now.我已经被这种问题困扰了一段时间了。 But I got my answer recently.但我最近得到了答案。 So I hope this helps you所以我希望这对你有帮助

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

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