Kivy Popup错误

时间:2015-01-26 18:33:35

标签: python-2.7 popup kivy

我似乎无法打开我的弹出窗口,因为它没有被定义'。一切都从Python传递到Kivy语言(因为它让我更容易跟踪所有内容),这就是问题所在。

<StoryScreen>:
name: "story"
BoxLayout:
    id: storyScreen
    Popup:
        id: "popup"
        title: "Settings"
        on_parent: 
            if self.parent == storyScreen: self.parent.remove_widget(self)
        GridLayout:
            cols: 2
            Accordion:
                orientation: "vertical"

                AccordionItem:
                    title: "Main Character"
                    size_hint:.9, 0.10
                    pos_hint: {'x':0.05, 'y':0.85}

                    Label: 
                        id: first
                        text: "First Name"

                AccordionItem:
                    title: "Love Interest"
                    size_hint: .9, 0.10
                    pos_hint: {'x':0.05, 'y':0.70}
            Button:
                text: "What's up"
    Button: 
        text: "Press to open popup"
        on_release: popup.open()

    Label: 
        text: "This is a label"

我的追踪错误如下:

   File "/Applications/Kivy.app/Contents/Resources/kivy/kivy/lang.py", line 1299, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "./story.kv", line 54, in <module>
     on_release: popup.open()
 NameError: name 'popup' is not defined

即使我尝试添加到Python

class popup(Popup):
    pass

它仍会抛出定义错误。帮助

2 个答案:

答案 0 :(得分:0)

嗯...弹出窗口确实没有定义,这就是问题所在。

您需要获取弹出类的实例(例如Popup()),这样您就可以运行类似Popup().open()的内容。

这仅适用于kivy popup类,对于您自己的子类,您必须将其导入kv范围,例如: #:import Yourpopupname main.Yourpopupname,然后你就可以Yourpopupname().open()。我说yourpopupname而不是你选择的popup,因为这是一个非常糟糕的名字可供选择,它令人困惑,因为它与kivy的Popup一样大写。此外,您通常应使用以大写字母开头的窗口小部件名称,因为kv语言依赖于此来识别它们。

答案 1 :(得分:0)

kv语言id是Python标识符。你不能调用Python变量"popup"(因为引号),所以它与kv相同。尝试使用id: popup代替id: "popup"