使用线程更新 Kivy 标签

Posted

技术标签:

【中文标题】使用线程更新 Kivy 标签【英文标题】:Updating Kivy Label Using Threading 【发布时间】:2019-12-06 03:49:27 【问题描述】:

我正在尝试制作一个 Kivy 标签,它显示一个只是名称列表的字符串。我的最终目标是使您可以添加或删除名称列表,并且标签将指示列表中的名称。到目前为止,我的 .py 文件中有一个标签和一个函数,可以将名称列表编译成一个字符串。

字符串中的每个名称都由“\n”分隔。然而,我的问题是,即使函数返回名称,标签也不会更新并显示名称。我研究了这个问题并听说了线程。但是,我不明白如何在我的情况下使用它,并寻求一些指导。

下面是我的代码:

千伏代码:

<SettingsWindow>:
name:"settings"
FloatLayout:
Widget:
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: "Images/logo_br.png"
        Color:
            rgba: 0,0,0,.5
        Rectangle:
            size: 200, 330
            pos: self.width/10, self.height/4
Button:
    text:"Back"
    size_hint: 0.1, 0.1
    pos_hint: "x":0, "y":0
    background_color: 1,1,1,.6 
    on_release:
        app.root.current = "main"
        root.manager.transition.direction = 'right'
Label:
    text: root.pretty_list_people
    size: self.texture_size
    pos_hint: "x":0.35, "y":-0.46
    color: 1,1,1,1
Button:
    text:"Show Bros"  
    size_hint: 0.3, 0.3
    pos_hint: "x":0.3, "y":0.1
    on_press: root.Pretty_Print_People(root.get_str_People())

py 代码:

class SettingsWindow(Screen):
pretty_list_people = ""

def get_str_Jobs(self):
    return WindowManager.jobs

def get_str_People(self):
    return WindowManager.people

def Pretty_Print_People(self, ppl_list):
    for person in ppl_list:
        self.pretty_list_people += person + "\n"

class HelpWindow(Screen):
    pass

class WindowManager(ScreenManager):
    jobs = ["Scrub", "Wash", "Clean"]
    people = ["Anthony", "Tim", "John"]
    job_assignments = 

我试图只显示必要的代码。

【问题讨论】:

【参考方案1】:

这应该可以,使用 kivy 属性:

变化:

pretty_list_people = ""

收件人:

pretty_list_people = StringProperty ("")

并添加导入:

from kivy.properties import StringProperty

在程序开始时

希望这可以帮助您解决问题

【讨论】:

以上是关于使用线程更新 Kivy 标签的主要内容,如果未能解决你的问题,请参考以下文章

Kivy 和无限线程循环 - 应用程序冻结

从另一个线程更改 kivy 属性

使用屏幕管理器更新 kivy 标签

Kivy:单击按钮时如何更新标签

Kivy ObjectProperty 更新标签文本

更新另一个类中的 kivy 标签文本