【问题标题】:kivy: popup with progress barkivy:带有进度条的弹出窗口
【发布时间】:2014-09-23 05:59:31
【问题描述】:

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

这是我尝试过的一个示例,但它只会在循环完成后显示弹出窗口。我希望在执行此操作时使其可见。

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

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

非常感谢!

【问题讨论】:

    标签: python popup progress-bar kivy


    【解决方案1】:

    您的问题是,for 循环不仅会阻塞弹出窗口,还会阻塞应用程序中的 所有内容 - 它与 kivy 的事件循环在同一个线程中运行,因此 kivy 不能做任何事情,直到完成了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2020-10-12
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多