【问题标题】:How to use input from user through MDDialog in kivymd and kivy如何在 kivymd 和 kivy 中通过 MDDialog 使用用户输入
【发布时间】:2021-12-26 07:12:49
【问题描述】:

我正在制作一个简单的待办事项应用程序,它通过 MDDialog 从用户那里获取输入并临时添加到 MDDataTable 我想知道如何在 MDDialog 中使用用户输入来插入 MDDataTable                                                                                                                                                                                          

from kivy.core import window
from kivy.metrics import dp
from kivy.uix.boxlayout import BoxLayout
from kivymd.uix.screen import Screen
from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable

from kivy.lang import Builder
from kivymd.uix.toolbar import MDToolbar
from kivymd.uix.button import MDIconButton, MDFlatButton
from kivymd.uix.dialog import MDDialog



window.Window.clearcolor = (0, 0, 0, 1)
window.Window.size = (360, 600)


KV = '''
<Content>
    orientation: "vertical"
    spacing: "12dp"
    size_hint_y: None
    height: "120dp"

    MDTextField:
        hint_text: "Enter a Todo"

    MDTextField:
        hint_text: "Enter Time"


MDFloatLayout:

'''


class Content(BoxLayout):
    pass

class Example(MDApp):
    
    dialog = None
    def build(self):
        
        tool_bar = MDToolbar(
            title= "Todo",
            pos_hint ={'center_y':.95}
        )
        
        
    
        data_tables = MDDataTable(
            size_hint=(1,.9),
            check = True,
            column_data=[
                ("", dp(10)),
                ("Content", dp(35)),
                ("Time", dp(15)),
            ]
        )

        add_button = MDIconButton(
            md_bg_color = self.theme_cls.primary_color,
            icon = 'plus',
            pos_hint = {'center_x':.5},
            on_press = self.show_confirmation_dialog
        )
        
        
        screen = Screen()
        screen.add_widget(tool_bar)
        screen.add_widget(data_tables)
        screen.add_widget(add_button)
        screen.add_widget(Builder.load_string(KV))
        return screen


    def show_confirmation_dialog(self, obj):

        def close_dilog(obj):
            self.dialog.dismiss()
        
        def use_input(obj):
            print('heare i wan to print the Todo and time')

        if not self.dialog:
            self.dialog = MDDialog(
                title="Address:",
                type="custom",
                content_cls=Content(),
                buttons=[
                    MDFlatButton(
                        text="CANCEL",
                        theme_text_color="Custom",
                        text_color=self.theme_cls.primary_color,
                        on_press = close_dilog
                    ),
                    MDFlatButton(
                        text="OK",
                        theme_text_color="Custom",
                        text_color=self.theme_cls.primary_color,
                        on_press = use_input
                    ),
                ],
            )
        self.dialog.open()


Example().run()

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    使用ids 是帮助从GUI 访问数据的便捷工具。这是您的kv 的修改版本,它将ids 添加到您的Content 类中:

    <Content>
        orientation: "vertical"
        spacing: "12dp"
        size_hint_y: None
        height: "120dp"
    
        MDTextField:
            id: todo
            hint_text: "Enter a Todo"
    
        MDTextField:
            id: time
            hint_text: "Enter Time"
    
    MDFloatLayout:
    

    然后你可以在你的use_input()方法中使用那些ids

        def use_input(obj):
            print('heare i wan to print the Todo and time')
            print('todo:', self.dialog.content_cls.ids.todo.text)
            print('time:', self.dialog.content_cls.ids.time.text)
    

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      相关资源
      最近更新 更多