2015-01-26 60 views
0

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

<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 

它仍然抛出一个定义错误。帮帮我?

回答

0

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

+0

这真的很简单。谢谢! :d – 2015-01-27 16:40:37

0

那么......弹出确实没有定义,这就是问题所在。

你需要得到弹出的种类(例如Popup())的实例,这样你就可以像Popup().open()运行的东西。

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