Kivy:KV 语言代码弹出关闭按钮

sot*_*trh 4 python kivy ubuntu-12.04

我正在尝试在 kivy 中编写一个自定义弹出窗口,以便从 ColorPicker 小部件中选择颜色。现在我正在尝试连接“确定”按钮来关闭弹出窗口,但它不起作用。弹出窗口显示正确,但是当我单击“确定”时,没有任何反应。弹出窗口继续在屏幕上显示。

这是我的 python 代码。

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()
Run Code Online (Sandbox Code Playgroud)

这是KV代码。

<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()
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢。抱歉所有代码!:)

tot*_*ico 5

弹出窗口未关闭的原因是您将其直接添加到PaintWindow此处:

<PaintWindow>:
    orientation: 'vertical'
    CPopup:
Run Code Online (Sandbox Code Playgroud)

而不是实际调用Popup的方法open()。所以,

CPopup:1 -从 kv 文件中删除

<PaintWindow>:
    orientation: 'vertical'
    #CPopup:
 ...
Run Code Online (Sandbox Code Playgroud)

2 - 在其他地方调用该open()方法。作为一个很好的build(self)例子PixPaint

class PixPaint(App):
    def build(self):
        pw = PaintWindow()
        popup = CPopup();
        popup.open()
        return pw
Run Code Online (Sandbox Code Playgroud)

以防万一,还有一些额外的内容:

  1. 您还可以去掉id: cpopup定义中的<CPopup>:并使用root( on_press: root.on_press_dismiss())。
  2. 此外,你可以摆脱on_press_dismiss()并做on_press: root.dismiss()相反的事情。