如何解决从不同的类中获取变量的文本
我试图从位于不同类的函数内的变量中获取文本。该变量从 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 举报,一经查实,本站将立刻删除。