簡體   English   中英

Python3 KivyMD - MDDialog 獲取 ItemConfirm 文本值

[英]Python3 KivyMD - MDDialog get ItemConfirm text value

我想在按下 OK 按鈕后將我的 MMDialog 中的選定項目傳遞給我的project_selected function。 但我不知道如何獲得價值並做到這一點。

我可以在 ItemConfirm class 中打印我的set_icon函數中的值,但我不知道將該值傳遞給HomeWindow(Screen) class的更好方法是什么,或者是否可以直接從 ItemConfirm 內部調用它已經從屬於 HomeWindow class 的 function 內部調用。

主程序

from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.app import MDApp
from kivymd.uix.button import MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.list import OneLineAvatarIconListItem


class ItemConfirm(OneLineAvatarIconListItem):
    divider = None

    def set_icon(self, instance_check):
        print(self.text)
        instance_check.active = True
        check_list = instance_check.get_widgets(instance_check.group)
        for check in check_list:
            if check != instance_check:
                check.active = False

    
class HomeWindow(Screen):
    dialog = None

    def show_confirmation_dialog(self):
        projects = [{id: 0, name: "example1"},{id: 1, name: "example2"}]

        if not self.dialog:
            self.dialog = MDDialog(
                title="Projects",
                type="confirmation",
                auto_dismiss=False,
                items=[ItemConfirm(text=f"{project['name']}") for project in projects],
                buttons=[
                    MDFlatButton(text="CANCEL", theme_text_color="Custom"),
                    MDFlatButton(
                        text="OK",
                        theme_text_color="Custom",
                        on_release=self.project_selected,
                    ),
                ],
            )
        self.dialog.open()

    def project_selected(self, *args, **kwargs):
        self.ids.project_selection.text = self.dialog.text


class WindowManager(ScreenManager):
    pass


class RlogTimer(MDApp):
    def build(self):

        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = "BlueGray"

        self.root = Builder.load_file("templates/main.kv")

        return self.root


if __name__ == "__main__":
    RlogTimer().run()

模板/main.kv

#: import NoTransition kivy.uix.screenmanager.NoTransition

WindowManager:
    HomeWindow:
    
<ScreenManager>:
    transition: NoTransition()

<ItemConfirm>:
    on_release: root.set_icon(check)

    CheckboxLeftWidget:
        id: check
        group: "check"

<HomeWindow>:
    name: "home"


    MDBoxLayout:
        orientation: "vertical"

        MDToolbar:
            id: title
            title: "Redmine logTimer"
            right_action_items: [["clock", lambda x: app.callback_2()]]

        MDFlatButton:
            id: project_selection
            text: "Select Project"
            pos_hint: {'center_x': .5, 'center_y': .5}
            on_release: root.show_confirmation_dialog()

您可以按如下方式實現,

  1. 首先創建一個道具。 比如說, HomeWindow中的selected_project作為,
class HomeWindow(Screen):
    dialog = None
    selected_project = StringProperty()
  1. 現在在方法set_icon中將其值設置為,
    def set_icon(self, instance_check):
        ...
        app = MDApp.get_running_app() # Access the running app instance.
        home_screen = app.root.get_screen("home") # Access required screen.
        home_screen.selected_project = self.text # Now set value.
        ...
  1. 現在是時候在方法project_selected中設置這個值了,
    def project_selected(self, *args, **kwargs):
        self.ids.project_selection.text = self.selected_project

暫無
暫無

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

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