python - kivy:如何使用StringProperty和bind()?

标签 python kivy bind object-properties

我有 2 个屏幕,由屏幕管理员管理。

我使用全局变量CHOSEN_ITEM来保存由第一个屏幕更改的字符串变量。

CHOSEN_ITEM由第二个屏幕显示。我知道必须使用 StringProperty 但我找不到一个很好的例子,我自己可以理解,为此......

from kivy.properties import ObjectProperty, StringProperty
    ...
CHOSEN_ITEM = ''

class FirstScreen(Screen):
      ...
    def save_chosen(self):
        global CHOSEN_ITEM
        CHOSEN_ITEM = chosen_item
      ...

class SecondScreen(Screen):
      ...
    global CHOSEN_ITEM
    chosen_item = StringProperty(CHOSEN_ITEM)

    def on_modif_chosenitem(self):
        print('Chosen Item was modified')
    self.bind(chosen_item=self.on_modif_chosenitem)
    ...

错误是:

     File "_event.pyx", line 255, in kivy._event.EventDispatcher.bind (/tmp/pip-build-udl9oi/kivy/kivy/_event.c:3738)
 KeyError: 'chosen_item'

我不知道如何将 bindStringProperty 一起使用。

最佳答案

好的,我找到了一个受 @inclement 启发的解决方案:Kivy ObjectProperty to update label text

from kivy.event import EventDispatcher
from kivy.properties import StringProperty
    ...
CHOSEN_ITEM = ''

class Chosen_Item(EventDispatcher):
    chosen = StringProperty('')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.chosen = 'Default String'
        self.bind(chosen=self.on_modified)

    def set_chosen_item(self, chosen_string):
        self.chosen = chosen_string

    def get_chosen_item(self):
        return self.chosen

    def on_modified(self, instance, value):
        print("Chosen item in ", instance, " was modified to :",value)  

class FirstScreen(Screen):
    global CHOSEN_ITEM
    CHOSEN_ITEM = Chosen_Item()
      ...
    def save_chosen(self):
      CHOSEN_ITEM.set_chosen_item(chosen_item) 
      ...

class SecondScreen(Screen):
      ...
    global CHOSEN_ITEM
    chosen_item = CHOSEN_ITEM.get_chosen_item()
    ...

这对我来说并不容易

关于python - kivy:如何使用StringProperty和bind()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28784080/

相关文章:

android - kivy python 程序在 android 上启动时立即关闭

android - kivy buildozer 虚拟机

objective-c - 绑定(bind) NSButton 状态

python - 阿拉伯语文本的 Kivy 文本输入

python - 如何从 python 列表中任何特定索引处的句子中提取特定字符串?

python - import modulename 的使用与导入模块的命名空间有什么关系?

python - 用 Python 控制鼠标

javascript - 如何绑定(bind)在 jquery 调用函数的选择菜单中定义的 onchange 事件?

javascript - 为什么我的 jQuery 触发器不起作用?

python - 如何使用 re.compile 和 re.findall 删除括号内的文本?