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