【发布时间】:2021-11-10 13:09:28
【问题描述】:
我正在尝试从代码中的按钮获取 id,但我找不到这样做的方法。这个按钮有一个long_touch的特性,它在按下按钮时创建一个循环,并打印“循环!”每 0.5 秒。我需要做很多功能,每一个都取决于按下了什么按钮。例如:如果按下按钮 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()
【问题讨论】:
-
id不作为LongTouchButton的一部分存储。您必须在prints()方法逻辑中使用其他内容。您可以使用LongTouchButton的text属性,也可以向LongTouchButton添加一个新属性(例如my_button_no: 1),然后在if中使用它。