为什么弹出关闭方法会导致错误? (python kivymd)
Why popup dismiss method causes an error? (python kivymd)
我正在尝试制作一个应用程序。单击屏幕右下角的按钮,会出现一个对话框 window(弹出窗口)。在“完成”上单击弹出窗口 window 预计将关闭(close_dialog
方法),但由于某种原因出现 AttributeError:
AttributeError: 'grudget4App' object has no attribute '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
方法on_release: app.close_dialog()
引用了你的grudget4App
class,但是你想在你的Container
class中调用方法。
所以我们需要在您的应用程序中获得正确的屏幕。由于 Container
是那里唯一的屏幕,也是根目录,您可以使用:
on_release: app.root.close_dialog()
我正在尝试制作一个应用程序。单击屏幕右下角的按钮,会出现一个对话框 window(弹出窗口)。在“完成”上单击弹出窗口 window 预计将关闭(close_dialog
方法),但由于某种原因出现 AttributeError:
AttributeError: 'grudget4App' object has no attribute '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
方法on_release: app.close_dialog()
引用了你的grudget4App
class,但是你想在你的Container
class中调用方法。
所以我们需要在您的应用程序中获得正确的屏幕。由于 Container
是那里唯一的屏幕,也是根目录,您可以使用:
on_release: app.root.close_dialog()