Добавление события on_release
в Button
виджет.
self.box.add_widget(Button(..., on_release=self.mycallback))
Примечания
Kivy »Основы сенсорных событий
По умолчанию сенсорные события отправляются всем отображаемым в данный момент
виджеты. Это означает, что виджеты получают событие касания, происходит ли оно
в пределах их физической области или нет.
...
Чтобы обеспечить максимальную гибкость, Kivy отправляет
события для всех виджетов и позволяет им решать, как реагировать на них.
Если вы хотите отвечать только на сенсорные события внутри виджета, вы
просто проверьте:
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
# The touch has occurred inside the widgets area. Do stuff!
pass
Решение
Поэтому вы хотите определить class PrinterButton
с наследованием виджета Button
и реализовать метод on_touch_down
, чтобы реагировать только на события касания для Button
touch.
Отрывки
class PrinterButton(Button):
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
print(f"\nPrinterButton.on_touch_down: text={self.text}")
self.dispatch('on_release')
return True # consumed on_touch_down & stop propagation / bubbling
return super(PrinterButton, self).on_touch_down(touch)
class WidgetFiscal(Screen):
box = ObjectProperty(None)
def on_box(self, *args):
fiscal = ['Elzab Mera TE FV', 'Posnet Thermal XL', 'Posnet HD', 'Elzab Sigma', 'Novitus Delio Prime E', 'Elzab D10', 'Posnet Trio', 'Epson TM-T801FV']
for i in fiscal:
self.box.add_widget(PrinterButton(text=str(i), background_color=[1,2,1,1], on_release=self.mycallback))
def mycallback(self, instance):
print(f"mycallback: Button.text={instance.text}")
выход