#python #kivy
#python #kivy
Вопрос:
Я хочу проверить, как регистрируется нажатие / нажатие кнопки (YearLabel). Если кнопка нажата в течение определенного времени, я не хочу выполнять логику в функции «to_2020».
Как я могу этого добиться? Спасибо
Python:
def on_touch_down(self, touch):
# if button is pressed for this time don't execute "to_2020"-logic
def to_2020(self):
layout = self.ids.years_layout
anim_to_2020 = Animation(pos=(0,-2900),duration=0.25)
label_2020 = self.ids.label_2020
anim_white_2020 = Animation(color=(1,1,1,1),duration=0.25)
anim_to_2020.start(layout)
anim_white_2020.start(label_2020)
Kv:
YearLabel:
id: label_2020
text: "2020"
font_size: "150sp"
color: 1,1,1,1
on_touch_down:
self.collide_point(*args[1].pos) and root.on_touch_down()
on_touch_up:
self.collide_point(*args[1].pos) and root.to_2020()
Комментарии:
1. вы имеете в виду, как долго?
Ответ №1:
Вы можете выполнить то, что, я полагаю, вы хотите, записав время on_touch_down
события и используя это в on_touch_up()
методе, чтобы определить, следует ли вызывать to_2020()
метод. Если вы не можете изменить YearLabel
класс, возможно, вы можете расширить его следующим образом:
class MyYearLabel(YearLabel):
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
self.time = time()
return super(MyYearLabel, self).on_touch_down(touch)
def on_touch_up(self, touch):
if self.collide_point(*touch.pos):
length_of_press = time() - self.time
if length_of_press > 2:
self.to_2020()
return super(MyYearLabel, self).on_touch_up(touch)
def to_2020(self):
layout = self.ids.years_layout
anim_to_2020 = Animation(pos=(0, -2900), duration=0.25)
label_2020 = self.ids.label_2020
anim_white_2020 = Animation(color=(1, 1, 1, 1), duration=0.25)
anim_to_2020.start(layout)
anim_white_2020.start(label_2020)
и в ‘kv’:
MyYearLabel:
id: label_2020
text: "2020"
font_size: "150sp"
color: 1,1,1,1
Методы on_touch_down()
и on_touch_up()
вызываются для вас kivy, поэтому вам не нужно упоминать их в kv
.
Комментарии:
1. Спасибо за ваш ответ. «YearLabel» — это не мой класс, у меня есть класс screen, и в этом классе есть «year_label». Я попытался получить доступ к «year labe»l в супер-инструкции с идентификатором, но безуспешно. Как я могу получить доступ к метке в классе экрана. Спасибо
2. Можете ли вы изменить
kv
этоYearLabel
правило?3. Да, что бы вы порекомендовали?
4. Смотрите мой измененный ответ.
5. Хорошо, спасибо. Есть ли какой-либо способ, которым я все еще могу сделать это с помощью класса Screen?