Reputation: 99
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(Button(text=str(i), background_color=[1,2,1,1]))
my .kv file :
<FiscalPrinter>:
name: 'fiscal_printer'
BoxLayout:
size: root.size
spacing: 20
padding: 10,10,10,10
orientation: 'vertical'
Label:
text: 'Choose fiscal printer which you want to rent'
size: root.width, root.height / 10
size_hint: None, None
WidgetFiscal:
Button:
text: 'GO BACK'
size: root.width, root.height / 10
size_hint: None, None
on_release: app.root.current = "rent_device"
<WidgetFiscal>:
box: box
GridLayout:
background_color: 1,2,1,1
cols: 3
id: box
Upvotes: 0
Views: 161
Reputation: 16031
Adding on_release
event to Button
widget.
self.box.add_widget(Button(..., on_release=self.mycallback))
By default, touch events are dispatched to all currently displayed widgets. This means widgets receive the touch event whether it occurs within their physical area or not.
...
In order to provide the maximum flexibility, Kivy dispatches the events to all the widgets and lets them decide how to react to them. If you only want to respond to touch events inside the widget, you simply check:
def on_touch_down(self, touch): if self.collide_point(*touch.pos): # The touch has occurred inside the widgets area. Do stuff! pass
Therefore you want to define class PrinterButton
with inheritance of Button
widget and implement on_touch_down
method to only respond to touch events for Button
touched.
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}")
Upvotes: 1