在弹出窗口中添加多个按钮

时间:2019-07-01 19:24:05

标签: python popup kivy

我创建了一个弹出窗口。通常我们使用pop.dismiss关闭弹出窗口。但我想在该弹出窗口中添加一些按钮。我有4个按钮。当按下其中两个按钮时,它们应该显示另一个小部件(框布局)。但是当我触摸这些按钮时,应用程序崩溃了。

,但是这4个按钮中的另外2个在触摸时会显示另一个弹出窗口。它运作良好。没有崩溃

1)从弹出窗口>单击按钮>显示另一个弹出窗口>不会崩溃

2)从弹出窗口>触摸下2个按钮>,以显示boxlayout小部件>应用程序崩溃了!

任何人都可以解释一下吗?我该如何解决?

python代码

class abc(Popup):   

    def about_app(self):
        self.clear_widgets()
        self.add_widget(about())    

    def about_leo(self):
        self.clear_widgets()
        self.add_widget(page1())

    def help(self):
        pops=help_popup()
        pops.open() 

    def website(self):
        pops=website()
        pops.open()

kv代码

<abc>:  
    title: 'LEO CLUB'
    title_color: 1, 0, 0, 1 
    title_size: 50
    title_align:'center'
    background: 'popup.png'
    size_hint: .6, 0.8
    pos_hint: {'right': .6, 'top': 1}

    BoxLayout:          
        BoxLayout:
            orientation:'vertical'                      

            Button:
                bold: True
                text: "About LEO"
                background_color: 0, 0, 0, 0
                on_release: root.about_leo()
            Button:
                bold:True
                text: "About App"
                background_color: 0, 0, 0, 0
                on_release: root.about_app()                                                 
            Button:
                bold: True
                text: "Website"
                background_color: 0, 0, 0, 0
                on_release: root.website()
            Button:
                bold: True
                text: "Help"
                background_color: 0, 0, 0, 0
                on_release: root.help()

1 个答案:

答案 0 :(得分:0)

您的代码正在self.add_widget()类(这是abc)中调用Popup,但是Popup只能有一个孩子(content )。对clear_widgets()的调用将删除Popup的所有子项,但不会更改content属性(可能应该更改)。因此,即使您删除了children中的Popup,它仍然认为它具有非空的content。因此,您真正需要做的就是设置新的content。在您的abc类中,只需将这两个方法替换为:

def about_app(self):
    self.content = about()

def about_leo(self):
    self.content = page1()