尝试在 MDDialog 上创建按钮时出现属性错误
attribute error when trying to create a button on MDDialog
我正在做一个单独的 class 这样,当出现异常时,弹出窗口将与 MDDialog 一起出现,我想要的是,当单击“确定”按钮时,弹出窗口将消失。很简单,不是吗?但是当我点击的时候出现这个错误:
AttributeError: 'MDRaisedButton' object has no attribute 'my_dialog'
这是MDDialogApp.py创建MDDialog:
from kivymd.app import MDApp
from kivymd.uix.button import MDRaisedButton
from kivymd.uix.dialog import MDDialog
class MDDialogAppTest(MDApp):
def __init__(self, *args):
super(MDDialogAppTest, self).__init__()
self.my_dialog = None
# Pop up for exceptions
def show_mddialog(self, msg):
self.my_dialog = MDDialog(
title='Oops, an error occurred',
text=msg,
type='alert',
size_hint=[.5, .5],
auto_dismiss=False,
buttons=[
MDRaisedButton(
text="OK", on_release=self.dialog_callback
)
],
)
self.my_dialog.open()
def dialog_callback(self):
self.my_dialog.dismiss()
这是我test.py重现的错误:
from kivy.lang import Builder
from kivymd.app import MDApp
from Automation.App import MDDialogApp
from Automation.App.MDDialogApp import MDDialogAppTest
KV = '''
MDFloatLayout:
MDFlatButton:
text: "ALERT DIALOG"
pos_hint: {'center_x': .5, 'center_y': .5}
on_release: app.click_button()
'''
class Example(MDApp):
def build(self):
self.my_dialog = None
return Builder.load_string(KV)
def click_button(self):
MDDialogApp.MDDialogAppTest.show_mddialog(self=MDDialogAppTest, msg="error: something")
Example().run()
我想了解我在这里做错了什么。提前致谢!
使用另一个 App
class 中定义的方法的一种简单方法是扩展那个 App
。这种方法会使您的 Example
应用发生变化:
class Example(MDDialogAppTest):
def build(self):
self.my_dialog = None
return Builder.load_string(KV)
def click_button(self):
self.show_mddialog(msg="error: something")
然后回到您的 MDDialogAppTest
class,您将需要调整 dialog_callback()
方法以允许额外的参数:
def dialog_callback(self, *args):
self.my_dialog.dismiss()
我正在做一个单独的 class 这样,当出现异常时,弹出窗口将与 MDDialog 一起出现,我想要的是,当单击“确定”按钮时,弹出窗口将消失。很简单,不是吗?但是当我点击的时候出现这个错误:
AttributeError: 'MDRaisedButton' object has no attribute 'my_dialog'
这是MDDialogApp.py创建MDDialog:
from kivymd.app import MDApp
from kivymd.uix.button import MDRaisedButton
from kivymd.uix.dialog import MDDialog
class MDDialogAppTest(MDApp):
def __init__(self, *args):
super(MDDialogAppTest, self).__init__()
self.my_dialog = None
# Pop up for exceptions
def show_mddialog(self, msg):
self.my_dialog = MDDialog(
title='Oops, an error occurred',
text=msg,
type='alert',
size_hint=[.5, .5],
auto_dismiss=False,
buttons=[
MDRaisedButton(
text="OK", on_release=self.dialog_callback
)
],
)
self.my_dialog.open()
def dialog_callback(self):
self.my_dialog.dismiss()
这是我test.py重现的错误:
from kivy.lang import Builder
from kivymd.app import MDApp
from Automation.App import MDDialogApp
from Automation.App.MDDialogApp import MDDialogAppTest
KV = '''
MDFloatLayout:
MDFlatButton:
text: "ALERT DIALOG"
pos_hint: {'center_x': .5, 'center_y': .5}
on_release: app.click_button()
'''
class Example(MDApp):
def build(self):
self.my_dialog = None
return Builder.load_string(KV)
def click_button(self):
MDDialogApp.MDDialogAppTest.show_mddialog(self=MDDialogAppTest, msg="error: something")
Example().run()
我想了解我在这里做错了什么。提前致谢!
使用另一个 App
class 中定义的方法的一种简单方法是扩展那个 App
。这种方法会使您的 Example
应用发生变化:
class Example(MDDialogAppTest):
def build(self):
self.my_dialog = None
return Builder.load_string(KV)
def click_button(self):
self.show_mddialog(msg="error: something")
然后回到您的 MDDialogAppTest
class,您将需要调整 dialog_callback()
方法以允许额外的参数:
def dialog_callback(self, *args):
self.my_dialog.dismiss()