我想要更改标签的文字,但我无法做到,我可以看到它在shell上更改但在UI上没有。我甚至通过引用它的id直接更改标签的文本,但仍然没有更新。谁知道怎么做?
class MainApp(Screen, EventDispatcher):
title = "Top 10 Plays of 2015"
def __init__(self,*args,**kwargs):
super(MainApp, self).__init__(*args, **kwargs)
def change_curr_title(self, title, *args):
self.title = title
self.ids.lblTitle.text = self.title
print(self.ids.lblTitle.text)
pass
class OtherVideos(BoxLayout, EventDispatcher):
def __init__(self, *args, **kwargs):
super(OtherVideos,self).__init__(*args, **kwargs)
self.loadVideos()
def loadVideos(self):
self.clear_widgets()
con = MongoClient()
db = con.nba
vids = db.videos.find()
vidnum = 1
for filename in vids:
myid = "vid" + str(vidnum)
getfilename = filename['filename']
button = Button(id=myid,
text=getfilename,
color=[0,0.7,1,1],
bold=1)
button.bind(on_release=partial(self.change_Title, getfilename))
self.add_widget(button)
vidnum += 1
def change_Title(self, title, *args):
main = MainApp()
main.change_curr_title(title)
这是我的结构:
<MainApp>:
....
BoxLayout:
....
BoxLayout:
....some widgets
BoxLayout:
OtherVideos:
...this is where the buttons are generated...
BoxLayout:
Label:
id: lblTitle
text: root.title
有没有上传我的整个代码?就像文件本身一样,所以你们可以看看它。
编辑:当我在没有参数的情况下制作这样的新方法并通过kivy将其绑定到按钮时,我可以轻松更新标签
def update_label(self):
self.ids.lblTitle.text = "New Title"
我不知道为什么动态创建事件的按钮无法正常工作。
答案 0 :(得分:0)
下面:
def change_Title(self, title, *args):
main = MainApp() # !
main.change_curr_title(title)
您正在创建一个新的屏幕对象(MainApp
),该对象未与任何内容相关联。要使其有效,main
应该链接到MainApp
屏幕的现有实例。
OtherVideos
框布局需要引用它,最好是在kv文件中。
修改强>
要创建从MainApp
到OtherVideos
的链接,请创建ObjectProperty
:
class OtherVideos(BoxLayout):
main = ObjectProperty()
def __init__(self, *args, **kwargs):
super(OtherVideos,self).__init__(*args, **kwargs)
self.loadVideos()
...
将填入kv文件:
OtherVideos:
main: root
...this is where the buttons are generated...
然后,在change_Title
函数中,使用此引用:
def change_Title(self, title, *args):
self.main.change_curr_title(title)