Kivy: Code Popup Dismiss Button in KV Language

kivy, python, ubuntu-12.04

Solution

The reason the popup is not closing is because you are adding it directly to your `PaintWindow` here:

<PaintWindow>:
    orientation: 'vertical'
    CPopup:

Instead of actually calling the method `open()` of Popup. So,

1 - Remove the `CPopup:` from the kv file

<PaintWindow>:
    orientation: 'vertical'
    #CPopup:
 ...

2 - Call the `open()` method somewhere else. As a good example in the `build(self)` of `PixPaint`

class PixPaint(App):
    def build(self):
        pw = PaintWindow()
        popup = CPopup();
        popup.open()
        return pw

Just in case, a few extras:

- You can also get rid off the `id: cpopup` on the the definition of `<CPopup>:` and use `root` instead (`on_press: root.on_press_dismiss()`).

- Moreover, you can get rid off the `on_press_dismiss()` and do `on_press: root.dismiss()` instead.

Problem

I'm trying to code a custom popup in kivy for picking a color from the ColorPicker widget. Right now i'm trying to hook up an 'OK' button to dismiss the popup, but it's not working. The popup up displays correctly, but when i click OK, nothing happens. The popup continues on screen. Here's my python code. ``` from kivy.app import App from kivy.uix.popup import Popup from kivy.uix.boxlayout import BoxLayout from kivy.uix.colorpicker import ColorPicker class PaintWindow(BoxLayout): pass class CPopup(Popup): def on_press_dismiss(self, *args): self.dismiss() return False class PixPaint(App): def build(self): pw = PaintWindow() return pw if __name__ == '__main__': PixPaint().run() ``` Here's the KV code. ``` <PaintWindow>: orientation: 'vertical' CPopup: <CPopup>: title: 'Pick a Color' size_hint: 1.0, 0.6 id: cpopup BoxLayout: orientation: 'vertical' ColorPicker: size_hint: 1.0, 1.0 Button: text: 'OK' size_hint: 1.0, 0.2 on_press: cpopup.on_press_dismiss() ``` Any help is much appreciated. Sorry for all the code! :)

Original source