如何将操作添加到“确定”按钮?我从KivyMd文档中获得了示例代码,但没有解释如何向这些按钮添加功能。代码:
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
KV = '''
<Content>
orientation: "vertical"
spacing: "12dp"
size_hint_y: None
height: "120dp"
MDTextField:
hint_text: "City"
MDTextField:
hint_text: "Street"
FloatLayout:
MDFlatButton:
text: "ALERT DIALOG"
pos_hint: {'center_x': .5, 'center_y': .5}
on_release: app.show_confirmation_dialog()
'''
class Content(BoxLayout):
pass
class Example(MDApp):
dialog = None
def build(self):
return Builder.load_string(KV)
def show_confirmation_dialog(self):
if not self.dialog:
self.dialog = MDDialog(
title="Address:",
type="custom",
content_cls=Content(),
buttons=[
MDFlatButton(
text="CANCEL", text_color=self.theme_cls.primary_color
),
MDFlatButton(
text="OK", text_color=self.theme_cls.primary_color
),
],
)
self.dialog.open()
Example().run()
单击“确定”后,我想从MDTextField(城市和街道)中获取文本。我认为我应该对这些MDTextField进行ID标识,并使用text =“ OK”将操作(on_release)添加到MDFlatButton,但这对我没有帮助。我将不胜感激。
答案 0 :(得分:1)
如前所述,如果将自定义方法设置为MDFlatButtons的on_press或on_release属性,则可以实现一些单击操作。
原因:
其无法正常工作的原因是对话框的高度未达到设置按钮的位置。在将自定义方法设置为on_press属性不起作用时,我必须自己进行挖掘,然后关闭对话框。
解决方案:
您当然可以自行设置高度,但是幸运的是,MDDialog类具有一个名为set_normal_height()的方法,该方法占窗口高度的80%,如您在探究源代码时所看到的那样kivymd代码。足以将按钮包含在对话框的(不可见)区域中。
现在,您可以像平常一样继续操作,并定义自定义方法,这些方法在按下或释放按钮时被调用。这是一个简短的示例,您如何获取textinputs值。正如您已经提到的那样,当您为文本输入分配ID时,您不需要isinstance部分。重要的是,我在打开对话框之前就插入了self.dialog.set_normal_height()方法。我希望它也对您有用。
示例:
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.textfield import MDTextField
KV = '''
<Content>
orientation: "vertical"
spacing: "12dp"
size_hint_y: None
height: "120dp"
MDTextField:
hint_text: "City"
MDTextField:
hint_text: "Street"
FloatLayout:
MDFlatButton:
text: "ALERT DIALOG"
pos_hint: {'center_x': .5, 'center_y': .5}
on_release: app.show_confirmation_dialog()
'''
class Content(BoxLayout):
pass
class Example(MDApp):
dialog = None
def build(self):
return Builder.load_string(KV)
def show_confirmation_dialog(self):
if not self.dialog:
self.dialog = MDDialog(
title="Address:",
type="custom",
content_cls=Content(),
buttons=[
MDFlatButton(
text="CANCEL", text_color=self.theme_cls.primary_color, on_release= self.closeDialog
),
MDFlatButton(
text="OK", text_color=self.theme_cls.primary_color, on_release=self.grabText
),
],
)
self.dialog.set_normal_height()
self.dialog.open()
def grabText(self, inst):
for obj in self.dialog.content_cls.children:
if isinstance(obj, MDTextField):
print(obj.text)
self.dialog.dismiss()
def closeDialog(self, inst):
self.dialog.dismiss()
Example().run()