沮丧的弹出错误
Kivy Popup Error
我似乎无法打开弹出窗口,因为它不是 'defined'。一切都从 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
它仍然抛出定义错误。帮忙?
嗯...弹出窗口确实没有定义,这就是问题所在。
您需要获取弹出窗口 class 的 实例 (例如 Popup()
),这样您就可以 运行 类似 Popup().open()
.
这只是针对 kivy 弹出 class,对于您自己的子class,您必须将其导入 kv 范围,例如#:import Yourpopupname main.Yourpopupname
,那么你可以做到Yourpopupname().open()
。我说 yourpopupname
而不是你选择的 popup
因为这是一个非常糟糕的名字,它很容易混淆,因为它与 kivy 的 Popup 一样大写。此外,您通常应该使用以大写字母开头的小部件名称,因为 kv 语言依赖于此来识别它们。
kv 语言 id
是 Python 标识符。你不能调用 Python 变量 "popup"
(因为引号),所以它与 kv 相同。尝试使用 id: popup
而不是 id: "popup"
.
我似乎无法打开弹出窗口,因为它不是 'defined'。一切都从 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
它仍然抛出定义错误。帮忙?
嗯...弹出窗口确实没有定义,这就是问题所在。
您需要获取弹出窗口 class 的 实例 (例如 Popup()
),这样您就可以 运行 类似 Popup().open()
.
这只是针对 kivy 弹出 class,对于您自己的子class,您必须将其导入 kv 范围,例如#:import Yourpopupname main.Yourpopupname
,那么你可以做到Yourpopupname().open()
。我说 yourpopupname
而不是你选择的 popup
因为这是一个非常糟糕的名字,它很容易混淆,因为它与 kivy 的 Popup 一样大写。此外,您通常应该使用以大写字母开头的小部件名称,因为 kv 语言依赖于此来识别它们。
kv 语言 id
是 Python 标识符。你不能调用 Python 变量 "popup"
(因为引号),所以它与 kv 相同。尝试使用 id: popup
而不是 id: "popup"
.