gpt4 book ai didi

python - 如何向 KivyMD MDDialog 中的按钮添加操作?

转载 作者:行者123 更新时间:2023-12-05 02:07:34 31 4
gpt4 key购买 nike

如何将 Action 添加到“确定”按钮?我从 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(城市和街道)中获取文本。我认为我应该为这些 MDTextFields 创建 id,并使用 text="OK"向 MDFlatButton 添加操作 (on_release),但这对我没有帮助。如果有任何建议,我将不胜感激。

最佳答案

正如您已经提到的,如果您将自定义方法设置为 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()

关于python - 如何向 KivyMD MDDialog 中的按钮添加操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61630469/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com