【问题标题】:Why a Kivy Button may not propagate events?为什么 Kivy Button 不能传播事件?
【发布时间】:2020-10-28 19:03:30
【问题描述】:

我在一个 kivy 应用程序中有以下代码。我只粘贴与 Button 相关的代码,因为这是行不通的。其余代码是关于在数据网格中显示列表数据,这工作正常。

class PnLScreen(Screen):
    data = ListProperty(defaultvalue=[])
    processing = BooleanProperty(defaultvalue=False)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        tryout.get_nse_prices()
        tryout.get_bse_prices()
        tryout.get_isin_to_symbol_map()
        self.box = BoxLayout(orientation='vertical')
        button = Button(size_hint_y=None)
        button.bind(on_press=self.go_home)
        self.box.add_widget(button)

    def go_home(self,instance):
        print("called from %s" % instance.text)
        # will figure out how to go home!

现在,当屏幕变为当前时,就会显示该按钮。但是在单击按钮时,永远不会调用绑定函数 go_home。我在它工作的其他屏幕上使用按钮。所以我不知道为什么这不会!实际上,我很生气无法让这个简单的事情发挥作用。

提前致谢

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    您在self.box.add_widget(button) 处将按钮添加到boxlayout,但您没有将boxLayout 添加到PnLScreen。 (self.add_widget(self.box))。这意味着按钮和 boxlayout 将永远不会显示。因此,您单击的按钮与您在上面的代码中创建的按钮不同。

    【讨论】:

    • 谢谢。我这样做了,也就是self.add_widget(self.box)。显示按钮,但根本没有生成(或传播)按下事件。不知道如何调试这个。这适用于主屏幕上的按钮(我有两个屏幕)。
    • 那我就不知道了。如果您发布一个重现问题的可运行示例,我也许能够找到问题的原因。
    • 抱歉,我不想调试您的整个应用程序。我建议使用检查器来确定您按下了哪个按钮。 kivy.org/doc/stable/api-kivy.modules.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2017-07-22
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多