为标签文本分配值后,为什么不更改标签文本?

时间:2018-08-09 06:12:09

标签: python kivy

这是我的代码的一部分-python文件使用文本创建按钮。然后,当按下其中一个按钮时-屏幕将更改,新屏幕上的标签必须与按下的按钮的文本相同。但是,即使其他所有内容都可以正常工作,标签的文本也不会更改,并且不会出现任何错误。

PYTHON:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.lang import Builder
from kivy.uix.button import Button


class ScreenOne(Screen):
    pass

class ScreenTwo(Screen):
    def on_pre_enter(self, *args):
        btn = Button(text = "word is here", on_release =self.pressedFunction)
        self.ids.container.add_widget(btn)

        btn1 = Button(text = "another word is here", on_release    =self.pressedFunction)
        self.ids.container.add_widget(btn1)

    def pressedFunction(self, instance, *args):
        self.manager.current= "three"

        screenThree = ScreenThree()
        text = str(instance.text)

        screenThree.changing_label(text)

class ScreenThree(Screen):
    def changing_label(self, text):
        self.ids.my_label.text = text

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("example.kv")

class MainApp(App):
    def build(self):
        return presentation

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

KIVY:

ScreenManagement:
    ScreenOne:
    ScreenTwo:
    ScreenThree:

<ScreenOne>:
    BoxLayout:
        Button:
            text: "press me"
            on_release: app.root.current = "two"

<ScreenTwo>:    
    name: "two"

    BoxLayout:
        id: container


<ScreenThree>:
    name: "three"

    BoxLayout:
        id: labelContainer

        Label:
            text: ""
            id: my_label

1 个答案:

答案 0 :(得分:0)

由于您没有提供任何类型的错误,所以我会猜测可能是错误的。 首先:

if spawned_List[0] == "False":

spawned_List没有在您的代码中定义,并且我不确定为什么要将该对象与字符串“ False”进行比较。

for x in range(0,len(languages)):

我建议您改为这样做:

for word in languages:
    btn = Button(
        text=str(word), size_hint=(None, None), size=(140,70),
        font_size=18, bold=True, color=[0,1,1,1],
        background_color=(.156, .172, .24, 0.7),
        on_release=self.changing_screen
    )

我可以做出的另一种猜测:

screenSlider = SliderScreen()

如果您已经拥有它的实例没有任何意义,则应该使用主实例。

如果您可以向我们提供更多信息,我们也许可以轻松回答您的问题。

----------- EDIT ----------------

screenThree = ScreenThree()

您正在创建ScreenThree的新实例,而该实例不是您希望使用的那个,因此您有同一类的两个不同实例,这就是为什么它不起作用的原因。相反,您应该使用ScreenManager或实例化该实例的任何实例并调用所需的方法。