Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么弹出式关闭方法会导致错误?(python kivymd)_Python_Kivy_Kivymd - Fatal编程技术网

为什么弹出式关闭方法会导致错误?(python kivymd)

为什么弹出式关闭方法会导致错误?(python kivymd),python,kivy,kivymd,Python,Kivy,Kivymd,我正在尝试制作一个应用程序。点击屏幕右下角的按钮,出现一个对话框窗口(弹出窗口)。单击“完成”后,弹出窗口将关闭(close\u dialogmethod),但由于某些原因,出现AttributeError: AttributeError:“grudget4App”对象没有属性“close_dialog” 你能告诉我为什么代码不工作以及如何修复它吗。谢谢 .py代码: from kivy.lang import Builder from kivy.core.window import Windo

我正在尝试制作一个应用程序。点击屏幕右下角的按钮,出现一个对话框窗口(弹出窗口)。单击“完成”后,弹出窗口将关闭(
close\u dialog
method),但由于某些原因,出现AttributeError:

AttributeError:“grudget4App”对象没有属性“close_dialog”

你能告诉我为什么代码不工作以及如何修复它吗。谢谢

.py代码:

from kivy.lang import Builder
from kivy.core.window import Window
from kivymd.app import MDApp
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
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
from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.list import TwoLineAvatarListItem

Window.size = (288, 511)

class DialogContent(BoxLayout):
    pass

class Container(Screen):
    dialog = None

    def show_dialog(self, *args):
        '''
        Create group creation popup
        '''
        if not self.dialog:
            self.dialog = MDDialog(
                title="Create new group",
                type="custom",
                content_cls=DialogContent(),
                auto_dismiss=False
            )
        self.dialog.open()

    def close_dialog(self, *args):
        '''
        Close popup on Done click
        '''
        self.dialog.dismiss()

class grudget4App(MDApp):
    def build(self):
        container = Container()
        return container

if __name__ == '__main__':
    grudget4App().run()
.kv代码:

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

    MDTextField:
        id: textfield
        hint_text: "Group name"

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


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

    Screen:
        NavigationLayout:
            ScreenManager:
                Screen:
                    BoxLayout:
                        orientation: 'vertical'
                        MDToolbar:
                            title: 'Demo Application'
                            left_action_items: [["menu", lambda x: nav_drawer.toggle_nav_drawer()]]
                            elevation:10
                        Widget:
            MDNavigationDrawer:
                id: nav_drawer
:
textfield:textfield
方向:“垂直”
间距:“12dp”
尺寸提示:无
高度:“120dp”
MDTextField:
id:textfield
提示文字:“组名”
MDFlatButton:
id:btn1
正文:“完成”
文本颜色:self.theme\u cls.primary\u颜色
发布时:应用程序关闭对话框()
:
MDFloatingActionButton:
位置提示:{'right':0.95,'y':0.05}
图标:“icon.png”
主题\文本\颜色:“自定义”
文本颜色:app.theme\u cls.primary\u颜色
发布时:
root.show_dialog()
屏幕:
导航布局:
屏幕管理器:
屏幕:
盒子布局:
方向:“垂直”
MDToolbar:
标题:“演示应用程序”
左键动作项:[[“菜单”,lambda x:nav_抽屉。切换导航抽屉()
标高:10
小装置:
MDNavigationDrawer:
id:nav_抽屉

发布时的方法
:app.close\u dialog()
引用了您的
grudget4App
类,但您希望在
容器中调用该方法

因此,我们需要在你的应用程序中设置正确的屏幕。由于
Container
是其中唯一的屏幕,也是根,因此您可以使用:

on_release: app.root.close_dialog()

非常感谢。如果它不是唯一的屏幕呢?在泰国的情况下,我们如何获得正确的屏幕?然后您可以使用
root.screens[screenIndex]
root.get\u screen[“screenName”]