【问题标题】:Kivy Popup or Eventloop Interaction?Kivy 弹出窗口或 Eventloop 交互?
【发布时间】:2014-07-29 07:09:13
【问题描述】:

我的应用程序的第一个屏幕有一个包含三个按钮的小菜单(在网格布局中)。两个应该打开弹出窗口。一个用于帮助,一个用于关于。 第三个切换到另一个屏幕。

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

【问题讨论】:

    标签: python event-handling popup kivy


    【解决方案1】:

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

    【讨论】:

    • 嗯,我认为通过将它们添加到 kivy 语言文件,然后 kivy 在对象树中放置对实例的引用。我对它的工作原理有误吗?
    • 是的,在按钮中添加对弹出窗口的引用确实可以解决问题。既然你指出了这一点,我明白我在哪里感到困惑。谢谢。
    • 小部件树中的小部件确实相互引用,但您的弹出窗口是动态构建的,没有存储对它们的引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多