kivy:带有进度条的弹出窗口

Posted

技术标签:

【中文标题】kivy:带有进度条的弹出窗口【英文标题】:kivy: popup with progress bar 【发布时间】: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()

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

非常感谢!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于kivy:带有进度条的弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

自动关闭kivy中的弹出窗口

Kivy:弹出窗口只能有一个小部件作为内容(当我导入两个不同的弹出模块时)

Kivy:访问不同类的方法

Kivy 如何创建一个可根据内容调整大小的弹出窗口?

Kivy Python 中的弹出窗口 - 显示在前面

更改 Kivy 中的弹出文本