Как вы уже упоминали, вы можете выполнить некоторые действия щелчка, если вы установите собственный метод для атрибутов on_press или on_release в MDFlatButtons.
Причина:
Причина, по которой он не работал правильно, заключалась в том, что высота диалогового окна не доходила до позиции, на которой были установлены кнопки . Мне пришлось самому вырыть это, когда установка пользовательских методов для атрибута on_press не сработала, и закрыть диалог.
Решение:
Конечно, вы можете установить высоту самостоятельно, но к счастью, в классе MDDialog есть метод set_normal_height () , который равен 80 % от высоты окна, как вы можете увидеть, погрузившись в исходный код kivymd. Этого достаточно, чтобы включить кнопку в (невидимую) область диалогового окна.
Теперь вы можете go включить, как обычно, и определить собственные методы, которые вызываются при нажатии или отпускании кнопки. Вот краткий пример того, как вы можете получить значение textinputs. Вам не нужна часть 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()