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! :)
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:
id: cpopup on the the definition of <CPopup>: and use root instead (on_press: root.on_press_dismiss()).on_press_dismiss() and do on_press: root.dismiss() instead.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With