1
我的应用程序的第一个屏幕有三个按钮的小菜单(在网格布局中)。两个应该打开弹出窗口。一个用于帮助,另一个用于关于。 第三个更改为另一个屏幕。Kivy Popup或Eventloop的互动?
只有一个弹出窗口工作。第一个调用(在kivy文件中)工作,第二个不打开弹出窗口。如果我在cdd.kv中切换顺序,那么另一个工作。从cdd.kv
摘录:
CDDMainMenuLayout:
HelpButton:
size_hint: .5,.5
MetadataButton:
size_hint: .5,.5
on_release: app.root.current = 'metadata'
AboutButton:
size_hint: .5,.5
从main.py摘录:
class CDDMainMenuLayout(GridLayout):
"""
Provides the layout for the three buttons on the home screen.
"""
def __init__(self, *args, **kwargs):
super(CDDMainMenuLayout, self).__init__(*args, **kwargs)
self.rows = 1
self.cols = 3
self.size_hint = (.5,.5)
...
class CDDButton(Button):
def __init__(self, **kwargs):
super(CDDButton, self).__init__(**kwargs)
self.text = _('Button')
self.background_color = colors.grey2
class AboutButton(CDDButton):
def __init__(self, **kwargs):
super(AboutButton, self).__init__(**kwargs)
self.text = _("About the CDD")
self.background_color = colors.red1
a = Popup()
a.title = _("About Constraint Definition Designer, Version - " + __version__)
a.content = RstDocument(source='about.rst')
a.size_hint_x = .8
a.size_hint_y = .8
self.bind(on_release=a.open)
class HelpButton(CDDButton):
def __init__(self, **kwargs):
super(HelpButton, self).__init__(**kwargs)
self.text = _("Help")
self.background_color = colors.green1
h = Popup()
h.title = _("CDD Help")
h.content = RstDocument(source='help.rst')
h.size_hint_x = .8
h.size_hint_y = .8
self.bind(on_release=h.open)
嗯,我认为通过将它们添加到kivy语言文件中,然后kivy将对实例的引用放置在对象树中。我错了这是如何工作的? –
是的,将参考添加到按钮中的弹出窗口可以解决问题。现在你指出了这一点,我看到我困惑的地方。谢谢。 –
构件树中的构件互相引用,但弹出式构件是动态构建的,没有引用存储给它们。 – inclement