我的第一个问题:),对你们来说可能是一个简单的问题...... 当我按下按钮时,我的标签文字更改有问题。
代码如下。 我尝试过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()
答案 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)