Kivy - 标签文字没有变化

时间:2015-03-23 11:16:14

标签: python kivy

我的第一个问题:),对你们来说可能是一个简单的问题...... 当我按下按钮时,我的标签文字更改有问题。

代码如下。 我尝试过on_press定义的许多变体:

self.on_press=lambda:YellowLabel.change_text(YellowLabel)
self.on_press=lambda:YellowLabel.change_text

不起作用

self.on_press=YellowLabel.change_text(YellowLabel)

返回:

  

KeyError:'text'

我想这可能是由于冲突,因为在初始化Label之前调用了函数。我试过的时候

self.on_press=YellowLabel.change_text

它返回:

  

TypeError:change_text()缺少1个必需的位置参数:'self'

我也尝试了许多其他变体,但我无法得到它。 并且,change_text中的print函数在下面的示例中工作,但Label文本不会更改。 我也尝试将change_text放在YellowLabel类之外,但仍然没有运气......

我做错了什么? 现在,我在想,也许change_text函数不好,但我无法理解为什么......

P.S。我确实在这个网站上遇到了许多与kivy有关的问题,并尝试过它们,但我无法让它发挥作用。

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button

class RedButton(Button):
    def __init__(self,txt="RED LABEL",**kwargs):
        super(RedButton,self).__init__(txt="RED LABEL",**kwargs)
        self.text=(txt)
        self.color=[1,0,0,1]
        self.on_press=lambda:YellowLabel.change_text(YellowLabel)


class YellowLabel(Label):
    def __init__(self,**kwargs):
        super(YellowLabel,self).__init__(**kwargs)
        self.text=("yellow")
        self.color=[1,1,0,1]
        self.id="yelb"

    def change_text(self):
        print("printed")
        self.text=("new yellow text")   

class Window(BoxLayout):
    def __init__(self,**kwargs):
        super(Window,self).__init__(orientation="vertical",**kwargs)
        self.add_widget(RedButton(txt="new red button"))
        self.add_widget(YellowLabel())

class UpdateApp(App):
    def build(self):
        return Window()

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

1 个答案:

答案 0 :(得分:0)

我说问题可能是self.on_press=lambda:YellowLabel.change_text(YellowLabel)您错过了在Window __init__中创建的对YellowLable的引用。您应该尝试从Window对象获取YellowLable小部件并在该

上调用change_text()

你的评论代码(毕竟你自己想出来了:-)):

class Window(BoxLayout):
        def __init__(self,**kwargs):
            super(Window,self).__init__(orientation="vertical",**kwargs)
            rb=RedButton(txt="new red button")
            self.add_widget(rb)
            yl=YellowLabel()
            self.add_widget(yl)
            rb.on_press=lambda:YellowLabel.change_text(yl)