gpt4 book ai didi

python - Kivy - UI 上的标签未更新

转载 作者:行者123 更新时间:2023-11-30 22:59:57 25 4
gpt4 key购买 nike

当我单击左侧的按钮时,“2015 年最佳 10 个播放”标签应该会更改为我单击的按钮的文本。我可以看到变量正在更改文本,但标签没有更改文本。

这是我的工作:当我单击左侧的按钮时,中间的标题应该改变: screen shot

python

class MainApp(Screen, EventDispatcher):
vid = StringProperty("Videos/Top 10 Plays of 2015.mp4")
title = StringProperty("Top 10 Plays of 2015")

def __init__(self,*args,**kwargs):
super(MainApp,self).__init__(*args, **kwargs)
pass

class OtherVideos(BoxLayout, EventDispatcher):
root = MainApp
def __init__(self, *args, **kwargs):
super(OtherVideos,self).__init__(*args, **kwargs)
self.loadVideos()

def loadVideos(self):
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],
bold=1)

button.bind(on_release=lambda x:(self.change_Title(getfilename), self.change_Vid(getfilename)))
self.add_widget(button)
vidnum += 1

def change_Title(self, title):
self.root.title = title

def change_Vid(self, myfilename):
con = MongoClient()
db = con.nba
vids = db.videos.find()

for filename in vids:
file = os.path.basename(filename['video_path'])
if myfilename == filename['filename']:
self.root.vid = filename['video_path']
break
pass

kivy

BoxLayout:
orientation: 'vertical'
Label:
id: lblTitle
text: root.title
size_hint_y: None
height: 40
font_size: 25
bold: 1
canvas.before:
Color:
rgba: 1, 0, 0, 0.7
Rectangle:
pos: self.pos
size: self.size
VideoPlayer:
id: activeVid
source: root.vid
state: 'play'

当我打印 root.title 时,它正在更改其文本,但标签没有更改它应该更改的内容,因为它从该变量获取文本。

但是当我像这样将 change_title() 方法放入 OtherVideos__init__ 中时,标签正在更改:

class OtherVideos(BoxLayout, EventDispatcher):
root = MainApp
def __init__(self, *args, **kwargs):
super(OtherVideos,self).__init__(*args, **kwargs)
self.change_Title("my title")

这已经花了我几天的时间,有人可以帮忙吗?

最佳答案

您的代码存在几个问题:

  1. 每个小部件都继承自 EventDispatcher,因此第二次继承它是没有意义的。
  2. root = MainApp 不是对 MainApp(对象)的引用,而是对其类的引用。
  3. 您无需指定 StringProperty 即可实现您的目标。

最简单的方法是在函数 change_Title 中添加要更改的标签的引用:

def change_Title(self, title):
# self.root.title = title
self.ids.my_label_to_change.text = title

关于python - Kivy - UI 上的标签未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35519482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com