我似乎无法打开我的弹出窗口,因为它没有被定义'。一切都从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
它仍会抛出定义错误。帮助
答案 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"
。