无法获取按钮的 id(Kivy 和 Python)

Fail to get an id of a button (Kivy and Python)

我正在尝试从我的代码中的按钮获取 ID,但我找不到实现该操作的方法。此按钮具有 long_touch 的功能,它会在按下按钮时创建一个循环,并打印“Loop!”每 0.5 sec.I 需要做很多功能,每一个都取决于按下了什么按钮。例如:如果按下按钮 1 -> go.function 1.

我不能得到的最好的是:{'lbl_txt':>} from self.ids,当我得到它时我感到很高兴第一次,但我发现这个值在每次调试时都会浮动,让我再次变得糟糕。 有人可以帮助我吗?

from kivymd.uix.behaviors import TouchBehavior
from kivymd.uix.button import MDIconButton
from kivy.lang import Builder
from kivy.clock import Clock
from kivy.core.window import Window
from kivymd.app import MDApp

class MainApp(MDApp):   
    def __init__(self, **kwargs):
        super().__init__(**kwargs)          
        self.kv =Builder.load_file('kv file') # Arquivo Kivy
        Window.maximize() # Tamanho inicial da janela
        
    def build(self):
        return self.kv

#Funcao para reconhecer e iniciar Hold_ltbLeftJ1Button -> Movimento continuo
class LongTouchButton(MDIconButton, TouchBehavior): 
    '''Class implement'''
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.duration_long_touch = 2    #Duracao para iniciar a funcao long touch

    def on_long_touch(self,*args):
        #MainApp.get_id(self)
        stringID = self.ids
        print(stringID)
        self.m = True
        self.while_long()

    def on_release(self, *args):
        self.m = False

    def while_long(self, *args):
        if self.m:
            print("LOOP!")
            Clock.schedule_once(self.while_long, .5)  #Cria o clock enquanto self.m = true e seta o intervalo de tempo para .5s
    
    def prints(self,*args):
        if(self.ids.bt1.text == "bt1"):         #i try this way - > not work, why?
            print("BUTTON 1 IS PRESSED")
        if(self.ids == "bt2"):                  #i try this another way, dont work
            print("BUTTON IS PRESSED")

if __name__=='__main__':
    MainApp().run()

现在.kv 文件

FloatLayout:
    orientation: "vertical"
    MDToolbar:
        title: "ACESS TO ID WITH PROBLEM"
        text_color: app.theme_cls.primary_color
        md_bg_color: 0, 0.3, 0.6, 1
        
    MDFloatLayout:              
        LongTouchButton:
            id: bt1
            text: "self.id"
            user_font_size : 80
            pos_hint: {"center_x": .3, "center_y": .5}
            on_press: self.prints()
        
        LongTouchButton:
            id: bt2
            text: "self.id"
            user_font_size : 80
            pos_hint: {"center_x": .7, "center_y": .5}
            on_press: self.prints()

正如我在评论中提到的,您可以将属性添加到 LongTouchButton:

FloatLayout:
    orientation: "vertical"
    MDToolbar:
        title: "ACESS TO ID WITH PROBLEM"
        text_color: app.theme_cls.primary_color
        md_bg_color: 0, 0.3, 0.6, 1
        
    MDFloatLayout:              
        LongTouchButton:
            id: bt1
            text: "self.id"
            my_butt_no: 1
            user_font_size : 80
            pos_hint: {"center_x": .3, "center_y": .5}
            on_press: self.prints()
        
        LongTouchButton:
            id: bt2
            text: "self.id"
            my_butt_no: 2
            user_font_size : 80
            pos_hint: {"center_x": .7, "center_y": .5}
            on_press: self.prints()

然后在 prints() 方法中使用它:

def prints(self, *args):
    # if (self.ids.bt1.text == "bt1"):  # i try this way - > not work, why?
    #     print("BUTTON 1 IS PRESSED")
    # if (self.ids == "bt2"):  # i try this another way, dont work
    #     print("BUTTON IS PRESSED")
    if self.my_butt_no == 1:
        print("BUTTON 1 IS PRESSED")
    if self.my_butt_no == 2:
        print("BUTTON 2 IS PRESSED")