kivy,如何通过python在多线程中显示值(StringProperty)

时间:2018-09-23 14:05:16

标签: python kivy

我要显示的值是由kivy多线程创建的。 该值是由其他类中的多线程过程创建的。我要在root_class中显示值。

详细信息: 多线程过程在步骤Aaa()中。类Aaa()中的多线程调用的方法在类Ddd()中。用奇异语言无法在运行过程中显示值?

python代码

class Aaa(BoxLayout):

    def multithread(self):

        ddd = Ddd()
        thread1 = threading.Thread(target=ddd.eee,args=())
        thread1.start()

class Ddd(BoxLayout):
    ff=StringProperty()

    def eee(self):
        self.e = 0
        for _ in range(10):
            self.e += 1
            self.f = self.e * 2
            self.ff = str(self.f)
            time.sleep(3)
class WwwApp(App):

    def build(self):
        return Aaa()

if __name__ == '__main__':
    WwwApp().run()

猕猴桃代码

<Aaa>:
    id: aaa
    size: 500,500
    orientation: 'vertical'
    Button:
        id: button_b
        text: 'exec_root.multithread()'
        size_hint_y: 0.5
        on_press: root.multithread()
    Ddd:
        size_hint_y: 0.5
<Ddd>:
    id: ddd
    size: 500,200
    Label:
        id: label_d
        text: root.ff    

谢谢您的指导!

1 个答案:

答案 0 :(得分:0)

您的猕猴桃代码将Ddd的实例创建为Aaa的子代。然后,您的multithread方法正在创建Ddd的另一个实例,并运行该新实例的eee,因此显示中的Ddd对此一无所知。您需要运行已经创建的eee实例的Ddd方法。使用ID进行检索。

因此,将ddd = Ddd()方法中的multithreaad替换为ddd = self.ids.ddd。另外,您还需要按照下面的顺序在id中移动ID:

<Aaa>:
    id: aaa
    size: 500,500
    orientation: 'vertical'
    Button:
        id: button_b
        text: 'exec_root.multithread()'
        size_hint_y: 0.5
        on_press: root.multithread()
    Ddd:
        id: ddd
        size_hint_y: 0.5
<Ddd>:
    size: 500,200
    Label:
        id: label_d
        text: root.ff