在kivy实验室生成随机数

2024-07-08 10:14:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个kivy标签上显示随机生成的数字,这类似于倒计时动画。你知道吗

原型.py(python文件):

    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.uix.boxlayout import BoxLayout
    import random
    import time


    class RootWidget(BoxLayout):
        def do(self):
            a = 0
            total = 5
            user = self.ids.name
            while a <= 10:
                randnum = random.randrange(total)
                user.text = str(randnum)

                a+=1


    class prototypeApp(App):
        def build(self):
            return RootWidget()

    if __name__ == "__main__":
        no=prototypeApp()
        no.run()

原型.kv(kv文件):

    <RootWidget>:
        orientation:'vertical'
        Label:
            id: name
            text:''
            font_size:70
            height:70
        Button:
            text:'click me'
            on_release:app.root.do()
            size_hint_y:.1

没有错误,但在标签上,它只显示最后一个数字 随机生成的数字。 但我希望循环中的数字在标签上流畅地流动,而不是只显示循环中的最后一个数字。你知道吗


Tags: 文件textnamefromimportselfapp数字
1条回答
网友
1楼 · 发布于 2024-07-08 10:14:23

do()方法中的循环在主线程上运行,主线程与更新GUI的线程相同。因为它是单个线程,所以在do()方法完成之前无法更新GUI,这意味着GUI中只显示最后一个随机数。你知道吗

要解决这个问题,请在单独的线程中运行该循环(请参见threading)。您将需要在主线程上执行self.ids.name.text = str(randnum)(考虑使用Clock来实现这一点)。你知道吗

您可能希望在循环中添加一个sleep,否则可能会发生得太快,无法看到中间数字。你知道吗

相关问题 更多 >

    热门问题