如何通过在弹出窗口中按下按钮来创建新按钮 (python kivy)

How to create a new button by pressing a button in popup (python kivy)

我正在尝试制作一个应用程序。单击屏幕右下角的按钮,会出现一个对话框 window(弹出窗口)。我想在主屏幕上点击“完成”创建一个新按钮。

我相信这个按钮会出现在“完成”点击“close_dialog”方法被调用,然后这个方法调用“new_window”方法。你能告诉我为什么代码不起作用以及如何修复它吗?谢谢

代码.py:

from kivy.lang import Builder
from kivy.core.window import Window
from kivymd.app import MDApp
from kivy.uix.boxlayout import BoxLayout

from kivy.uix.button import Button
from kivymd.uix.label import MDLabel
from kivy.uix.gridlayout import GridLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.scrollview import ScrollView

from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.textfield import MDTextField

Window.size = (240, 426)

class ContentNavigationDrawer(BoxLayout):
    pass

class Content(BoxLayout):
    pass

class Container(BoxLayout):
    dialog = None
    button_amount = 1

    def show_dialog(self):
        if not self.dialog:
            self.dialog = MDDialog(
                title="Create new group",
                type="custom",
                content_cls=Content(),
            )
        self.dialog.open()

    def close_dialog(self, *args):
        self.dialog.dismiss()
        self.new_window()

    def new_window(self, *args):
        self.add_widget(
        MDFlatButton(text="New group", size_hint_y=None, height=100))


class testApp(MDApp, Container):
    def build(self):
        return Container()

if __name__ == '__main__':
    testApp().run()

代码.kv:

<Content>
    orientation: "vertical"
    spacing: "12dp"
    size_hint_y: None
    height: "120dp"

    MDCheckbox:
        hint_text: "Online"
        size_hint: (None, None)
        active: True
        pos_hint: {'center_x': .5, 'center_y': .4}

    MDTextField:
        hint_text: "Group name"

    MDFlatButton:
        id: btn1
        text: "Done"
        text_color: self.theme_cls.primary_color
        on_release: app.close_dialog()

<Container>
    orientation: "vertical"
    Screen:
        MDFloatingActionButton:
            pos_hint: {'right': 0.95, 'y': 0.05}
            theme_text_color: "Custom"
            text_color: app.theme_cls.primary_color
            on_release:
                app.show_dialog()

        NavigationLayout:
            ScreenManager:
                Screen:
                    BoxLayout:
                        orientation: 'vertical'
                        MDToolbar:
                            size_hint: 1, 0.15
                            title: "Navigation Drawer"
                            elevation: 10
                            left_action_items: [['menu', lambda x: nav_drawer.toggle_nav_drawer()]]
                        Widget:

            MDNavigationDrawer:
                id: nav_drawer

                ContentNavigationDrawer:

首先,按钮 Done 没有被点击,因为 dialog 在您点击它之前会自动关闭。所以将对话框更改为:

self.dialog = MDDialog(
    title="Create new group",
    type="custom",
    content_cls=Content(),
    auto_dismiss=False
)

然后你需要告诉你的应用程序你想插入小部件的位置。目前您正在尝试将它放在应用程序 class 上,但它不起作用。在这个例子中我把它放在主要的window,但是你可以根据自己的需要改变:

def new_window(self, *args):
    btn = MDFlatButton(text="New group", size_hint_y=None, height=100)
    self.root.add_widget(btn)