Kivy Popup或Eventloop互动?

时间:2014-06-08 16:55:07

标签: python event-handling popup kivy

我的应用的第一个屏幕有一个三个按钮的小菜单(在gridlayout中)。两个应该打开弹出窗口。一个用于帮助,一个用于关于。 第三个改为另一个屏幕。

只有一个弹出窗口有效。第一个调用(在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)

1 个答案:

答案 0 :(得分:1)

如果添加额外的行self.popup = hself.popup = a,有什么变化吗?一种可能性是你的弹出窗口只是被垃圾收集,因为你不存储对它们的任何引用。我不确定这是否会影响您的特定行为,但值得一试。