Python Kivy更改标签文本

Python Kivy更改标签文本,python,kivy,kivy-language,Python,Kivy,Kivy Language,我想在检测到刷卡事件后更改Python/Kivy中的标签文本。更改文本基本上通过以下行工作 self.Translation.text = "test" 但在检测到另一个类的刷卡事件后,我必须更改文本,在该类中,我调用一个函数来更改标签文本: MyWidget.ThisDoesntWork("self_dummy") 在这个函数中,与上面完全相同的一行给出了一个错误 如何从类“Swiping\u class”调用函数“MyWidget.ThisDoesNetwork(“s

我想在检测到刷卡事件后更改Python/Kivy中的标签文本。更改文本基本上通过以下行工作


    self.Translation.text = "test"
但在检测到另一个类的刷卡事件后,我必须更改文本,在该类中,我调用一个函数来更改标签文本:


    MyWidget.ThisDoesntWork("self_dummy")
在这个函数中,与上面完全相同的一行给出了一个错误

如何从类“Swiping\u class”调用函数“MyWidget.ThisDoesNetwork(“self\u dummy”)”更改标签文本?


    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.anchorlayout import AnchorLayout
    from kivy.uix.button import Button
    from kivy.uix.label import Label
    from kivy.uix.textinput import TextInput
    from kivy.base import EventLoop
    from kivy.clock import Clock
    from kivy.factory import Factory
    from kivy.uix.stacklayout import StackLayout
    from kivy.uix.image import Image
    from kivy.uix.floatlayout import FloatLayout
    from kivy.graphics import *
    from kivy.properties import ListProperty
    from kivy.lang import Builder
    from kivy.core.window import Window
    from kivy.uix.screenmanager import ScreenManager, Screen
    from random import random
    import pickle
    import random


    kv = '''
    <ColoredLabel>:
        size: (self.size_x,self.size_y)
        pos: (0,0) # no effect
        background_color:
        canvas.before:
            Color:
                rgba: self.background_color
            Rectangle:
                pos: self.pos
                size: (self.size_x,self.size_y)
        '''

    Builder.load_string(kv)

    class ColoredLabel(Label):
        background_color = ListProperty((0,0,0,1))
        s_global = Window.size
        size_x = s_global[0]
        size_y = s_global[1]/3

    class MyWidget(BoxLayout):
        #init
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            s_global = Window.size
            size_x = s_global[0]
            size_y = s_global[1]/3
            self.ForeignLanguage = ColoredLabel(text="str_fl", size_hint=(None, None),size = (size_x,size_y), background_color=(0/255,171/255,169/255, 1))
            self.Translation = ColoredLabel(text="str_tr", size_hint=(None, None),size = (size_x,size_y), background_color=(45/255,137/255,239/255, 1))
            self.Example = ColoredLabel(text="str_ex", size_hint=(None, None),size = (size_x,size_y), background_color=(43/255,87/255,151/255, 1))

            self.verticalBox     = BoxLayout(orientation='vertical')
            self.verticalBox.add_widget(self.ForeignLanguage)
            self.verticalBox.add_widget(self.Translation)
            self.verticalBox.add_widget(self.Example)

            self.Translation.text = "test"

            s=Swiping_class()
            s.add_widget(self.verticalBox)
            self.add_widget(s)

        def ThisDoesntWork(self):
            print("this is printed")
            self.Translation.text = "I wanna change this via fucntion"
            print("this is not printed anymore")

    class Swiping_class(Screen):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            self.initial = 0
        def on_touch_down(self, touch):
            self.initial = touch.x

        def on_touch_up(self, touch):
            if touch.x < self.initial:
                print("swiped left")
                MyWidget.ThisDoesntWork("self_dummy")
            else:
                print("swiped right")

    class BoxLayoutDemo(App):
        def build(self):
            return MyWidget()

    if __name__ == '__main__':
        BoxLayoutDemo().run()

从kivy.app导入应用程序
从kivy.uix.boxlayout导入boxlayout
从kivy.uix.anchorlayout导入anchorlayout
从kivy.uix.button导入按钮
从kivy.uix.label导入标签
从kivy.uix.textinput导入textinput
从kivy.base导入EventLoop
从kivy.clock导入时钟
来自kivy工厂进口工厂
从kivy.uix.stacklayout导入stacklayout
从kivy.uix.image导入图像
从kivy.uix.floatlayout导入floatlayout
从kivy.graphics导入*
从kivy.properties导入ListProperty
从kivy.lang导入生成器
从kivy.core.window导入窗口
从kivy.uix.screenmanager导入screenmanager,屏幕
从随机导入随机
进口泡菜
随机输入
kv='''
:
大小:(self.size\x,self.size\y)
位置:(0,0)#无效
背景颜色:
在以下情况之前:
颜色:
rgba:self.background\u颜色
矩形:
pos:self.pos
大小:(self.size\x,self.size\y)
'''
建筑商荷载(千伏)
类别彩色标签(标签):
背景颜色=列表属性((0,0,0,1))
s_global=Window.size
大小x=s\u全局[0]
大小y=s_全局[1]/3
类MyWidget(BoxLayout):
#初始化
定义初始(自我,**kwargs):
超级()
s_global=Window.size
大小x=s\u全局[0]
大小y=s_全局[1]/3
self.ForeignLanguage=ColoredLabel(text=“str_fl”,size_hint=(无,无),size=(size_x,size_y),background_color=(0/255171/255169/255,1))
self.Translation=ColoredLabel(text=“str_tr”,size_hint=(无,无),size=(size_x,size_y),background_color=(45/255137/255239/255,1))
self.Example=ColoredLabel(text=“str_ex”,size_hint=(无,无),size=(size_x,size_y),background_color=(43/255,87/255151/255,1))
self.verticalBox=BoxLayout(方向为竖直)
self.verticalBox.add_小部件(self.ForeignLanguage)
self.verticalBox.add_小部件(self.Translation)
self.verticalBox.add_小部件(self.Example)
self.Translation.text=“测试”
s=刷卡类()
s、 添加_小部件(self.verticalBox)
self.add_小部件
def ThisDoesNetwork(自身):
打印(“这是打印的”)
self.Translation.text=“我想通过功能更改此内容”
打印(“不再打印此文件”)
类刷卡\u类(屏幕):
定义初始(自我,**kwargs):
超级()
self.initial=0
def on_触控向下(自身,触控):
self.initial=touch.x
def on_touch_up(自我,触摸):
如果touch.x
我想我找到了解决办法。在您的Swiping_类中,替换此行:

MyWidget.ThisDoesntWork("self_dummy")
MyWidget.ThisDoesntWork(self.parent)
这一行:

MyWidget.ThisDoesntWork("self_dummy")
MyWidget.ThisDoesntWork(self.parent)

这样,您就可以传递包含您试图修改的文本属性的label对象,而不是向方法传递字符串

更改为
self.parent.ThisDoesNetwork()