【问题标题】:why does the Label text not change after I assigned it the value?为什么标签文本在我为其赋值后没有改变?
【发布时间】:2018-08-09 18:59:18
【问题描述】:

这是我的代码的一部分 - 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()

基维:

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

【问题讨论】:

标签: python kivy


【解决方案1】:

由于您没有提供任何类型的错误,我猜猜可能出了什么问题。 首先:

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()

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

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

-----------编辑----

screenThree = ScreenThree()

您正在创建一个不是您期望工作的 ScreenThree 的新实例,因此您有同一个类的两个不同实例,这就是它不工作的原因。相反,您应该使用 ScreenManager 获取该实例,或者您在任何地方实例化它并调用您想要的方法。

【讨论】:

  • 对不起,我没有解释这个权利。我现在更改了代码,使其看起来更容易并且没有无关人员。请您再看一遍,以便您能充分理解问题所在?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多