kivy:带进度条的弹出窗口

时间:2014-07-31 10:18:41

标签: python popup progress-bar kivy

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

以下是我尝试过的示例,但它只会在循环完成后显示弹出窗口。我希望在做的时候能看到它。

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()

或者我应该使用线程/自定义小部件,如果是这样我将如何实现?

非常感谢!

1 个答案:

答案 0 :(得分:2)

你的问题是for循环不仅阻止弹出窗口,而且还阻止你应用程序中的所有 - 它与kivy的eventloop在同一个线程中运行,所以kivy可以'什么都不做,直到它完成。

您应该在单独的线程中运行for循环,或者将其分解为可以使用Clock.schedule_once或Clock.schedule_interval调度的较小组件。这将让kivy在运行代码位之间执行正常任务。