kivy:弹出进度b

2024-04-20 05:40:58 发布

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

是否可以创建一个带有“移动”进度条的弹出窗口?在

下面是一个我尝试过的例子,但是它只会在循环完成后显示弹出窗口。我想在做的时候让它看得见。在

import time

from kivy.app import App

from kivy.uix.button import Button
from kivy.uix.progressbar import ProgressBar
from kivy.uix.popup import Popup

databases = range(5)

class testApp(App):

    def launch_popup(self, instance):
        print("Button pressed for popup: {0}".format(instance))
        import time 

        pb = ProgressBar() #100
        popup = Popup(title='Syncing Databases', content=pb, size_hint=(0.7, 0.3))
        popup.open()

        for i in databases:
            time.sleep(1) #simulate syncing database
            pb.value += 100/len(databases)
            print("Progressbar is on {0}%".format(pb.value))


    def build(self):
        btn = Button(text="Popup", on_press=self.launch_popup)
        return btn


testApp().run()

或者我应该使用线程/一个自定义小部件,如果是的话,我该如何实现呢?在

多谢了!在


Tags: fromimportselfapptimedefbuttondatabase
1条回答
网友
1楼 · 发布于 2024-04-20 05:40:58

你的问题是for循环不仅会阻止弹出窗口,还会阻止应用程序中的其他所有内容-它与kivy的eventloop运行在同一线程中,因此kivy在完成之前不能做任何事情。在

相反,您应该在单独的线程中运行for循环,或者将其拆分为可以调度的较小组件打卡一次时间表或者时钟时间表间隔. 这将让kivy在运行代码的两个部分之间执行其正常任务。在

相关问题 更多 >