微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从不同的类中获取变量的文本

如何解决从不同的类中获取变量的文本

我试图从位于不同类的函数内的变量中获取文本。该变量从 KivyMD 的 MDTextField 中获取其文本值。我尝试了两种方法:直接使用 MDTextField id 获取值并调用为变量提供此类文本的值。

我相信解决方案非常简单,但我无法正确执行此操作。

最小可复制示例的代码

Python 文件

from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager,Screen
from kivymd.app import MDApp
from kivymd.uix.expansionpanel import MDExpansionPanel,MDExpansionPanelOneLine
from kivy.uix.Boxlayout import BoxLayout
from kivymd.uix.menu import MDDropdownMenu
from kivy.clock import Clock


class ActivityContent(BoxLayout):
    menu = None
    dropdown_value = ObjectProperty(None)

    def dropdown_activity(self):
        # Create the drop down menu
        actividades = ["Correo electrónico","Hora Regreso a Oficina","Hora Salida de Oficina","Llamada de cortesia","Llamada de Presentación","Llamada de Promoción","Seguimiento a Cotización","Traslado","Visita a Cliente","Whatsapp"]
        menu_items = [{"text": f"{actividad}"} for actividad in actividades]
        self.menu = MDDropdownMenu(
            caller=self.ids.dropdown_Actividades,items=menu_items,width_mult=5,)
        self.menu.open()
        self.menu.bind(on_release=self.set_item)

    def set_item(self,instance_menu,instance_menu_item):
        def set_item(interval):
            self.ids.dropdown_Actividades.text = instance_menu_item.text
            self.dropdown_value = self.ids.dropdown_Actividades.text
            instance_menu.dismiss()
            print(self.dropdown_value)
        Clock.schedule_once(set_item,0.5)


class AdditionalCommentsContent(BoxLayout):
    def complete_registration(self):
        print(ActivityContent.dropdown_value)  


class IngActivWindow(Screen):
    activity_container = ObjectProperty(None)

    def activity_expansion_panel(self):
        self.ids.activity_container.clear_widgets()
        # Informacion de Actividad PANEL
        self.ids.activity_container.add_widget(
            MDExpansionPanel(icon="images/infoActividad.png",content=ActivityContent(),panel_cls=MDExpansionPanelOneLine(
                                 text="Información de Actividad")))
        # Comentarios Adicionales PANEL
        self.ids.activity_container.add_widget(
            MDExpansionPanel(icon="images/comentarios.png",content=AdditionalCommentsContent(),panel_cls=MDExpansionPanelOneLine(
                                 text="Comentarios Adicionales")))


class MainMenuWindow(Screen):
    pass


class WindowManager(ScreenManager):
    pass


class ReproducibleExample(MDApp):

    def build(self):
        self.theme_cls.primary_palette = "teal"
        return WindowManager()


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

KV 文件

<WindowManager>:
    id: screen_manager
    MainMenuWindow:
        id: main
        name: 'main'
    IngActivWindow:
        id: ingActiv
        name: 'ingActiv'


<MainMenuWindow>
    MDRaisedButton:
        text: 'Enter'
        pos_hint: {'center_x': 0.5,'center_y': 0.5}
        on_press:
            root.manager.current = 'ingActiv'
            root.manager.transition.direction =  'right'

<IngActivWindow>:
    name: 'ingActiv'
    on_pre_enter: root.activity_expansion_panel()

    FloatLayout:
        cols:1
        GridLayout:
            id: activity_container
            size_hint: 1,None
            cols: 1
            height: self.minimum_height
            pos_hint: {'center_x': 0.5,'center_y': 0.5}


<ActivityContent>:
    size_hint: 1,None
    height: self.minimum_height
    orientation: 'vertical'
    padding: "15dp","25dp","15dp","5dp"

    # TIPO DE ACTIVIDAD
    MDBoxLayout:
        orientation: 'horizontal'
        padding: "15dp","5dp","5dp"
        spacing: "5dp"
        adaptive_height: True
        size_hint: 1,None

        MDTextField:
            id: dropdown_Actividades
            write_tab: False
            size_hint: 1,None
            pos_hint: {"x": 0,"center_y": 0.5}
            icon_right: 'arrow-down-drop-circle-outline'
            hint_text: 'Seleccionar Tipo de Actividad'
            write_tab: False
            enabled: False
            on_focus: if self.focus: root.dropdown_activity()
        MDBoxLayout:
            size_hint_x: 0.1

<AdditionalCommentsContent>:
    size_hint: 1,None
    height: self.minimum_height
    orientation: 'vertical'
    adaptive_height: True

    MDRaisedButton:
        text: "Registrar Actividad"
        size_hint: None,None
        pos_hint: {'center_x': 0.5,'center_y': 0.5}
        font_size: 12.5
        on_release:
            root.complete_registration()

问题出在 AdditionalCommentsContent 类中的 complete_registration 函数中。我正在尝试使用 dropdown_value 文本。然而,它没有打印其实际值(就像在 ActivityContent 类中的 set_item 函数中一样),它只是打印 <ObjectProperty name=dropdown_value>。如果我尝试使用 ActivityContent.dropdown_value.text,我会收到以下错误

AttributeError: 'kivy.properties.ObjectProperty' object has no attribute 'text'

正如我之前提到的,我尝试了 self.ids.dropdown_Actividades.text 方法,但这也不起作用。

如何从这个 MDTextField 中获取实际的文本值?

非常感谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。