【问题标题】:Kivy: Code Popup Dismiss Button in KV LanguageKivy:KV 语言中的代码弹出关闭按钮
【发布时间】:2013-12-28 23:50:57
【问题描述】:

我正在尝试在 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()

这是 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()

非常感谢任何帮助。对不起所有的代码! :)

【问题讨论】:

    标签: python ubuntu-12.04 kivy


    【解决方案1】:

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

    <PaintWindow>:
        orientation: 'vertical'
        CPopup:
    

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

    1 - 从 kv 文件中删除 CPopup:

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

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

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

    以防万一,一些额外的东西:

    1. 你也可以去掉&lt;CPopup&gt;:定义上的id: cpopup,改用root(on_press: root.on_press_dismiss())。
    2. 此外,您可以去掉on_press_dismiss(),改用on_press: root.dismiss()

    【讨论】:

    • 这是有道理的。窗口将其视为永久小部件。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2014-10-17
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多