簡體   English   中英

如何向 KivyMD MDDialog 中的按鈕添加操作?

[英]How can I add actions to the button in KivyMD MDDialog?

如何將操作添加到“確定”按鈕? 我從 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 class 有一個名為 set_normal_height() 的方法,它是 window 高度的 80%,正如您在深入了解 kivymd 的源代碼時所見。 這足以將按鈕包含在對話框的(不可見)區域中。

現在您可以像往常一樣打開 go 並定義在按下或釋放按鈕時調用的自定義方法。 這是一個簡短的示例,您可以如何獲取 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM