2

I am trying to transfer my widget creation to .kv instead of in my main.py. How can I still reference my on_press commands? painter is another child widget and contains the function I want to call, however I am unsure how I can reference painter.acceptshape from .kv.

class TestingApp(App):
    def build(self):
    parent = FloatLayout()

    keepbtn = Button(pos= (10,10),text='Accept Shape',size_hint=(.25, .15),font_size=14, color=(0.960784, 1, 0.980392,1), background_normal = '',\
        background_color= ( 0.0980392, 0.0980392, 0.439216,1), font_name='Exo2-Bold.otf')

    restartbtn = Button(text='Restart',size_hint=(.2, .15),font_size=14, color=(0.960784, 1, 0.980392,1), background_normal = '',\
        background_color= (0.0980392, 0.0980392, 0.439216,1), font_name='Exo2-Bold.otf')

    renderbtn = Button(text = "Render Shape", size_hint=(.2, .15),font_size=14, color=(0.960784, 1, 0.980392,1), background_normal = '',\
        background_color= ( 0.0980392, 0.0980392, 0.439216,1), font_name='Exo2-Bold.otf')

    parent.add_widget(keepbtn)
    parent.add_widget(restartbtn)
    parent.add_widget(renderbtn)

    # if free draw option
    painter = FreeDraw()
    keepbtn.bind(on_press=painter.acceptshape)
    restartbtn.bind(on_press=painter.restart)
    renderbtn.bind(on_press=painter.render)
    parent.add_widget(painter)

    # # if preloaded box
    return parent

if __name__ == '__main__':
    TestingApp().run()

kv:

<FloatLayout>:
    canvas:
        Rectangle:
            source: 'background.jpg'
            size: self.size
            pos: self.pos
Peter Badida
  • 11,310
  • 10
  • 44
  • 90
Jamie
  • 109
  • 1
  • 9
  • well! inclement's answer is more that sufficient, but if you still have doubt's then this might help you. http://stackoverflow.com/questions/30202801/how-to-access-id-widget-of-different-class-from-a-kivy-file-kv – kiok46 Jun 03 '15 at 16:38

1 Answers1

2

Here's a simplified example showing how to do it using an id.

BoxLayout:
    Button:
        text: 'press me'
        on_press: painter.do_something()
    FreeDraw:
        id: painter
inclement
  • 29,124
  • 4
  • 48
  • 60