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

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

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

非常感谢!

最佳答案

你的问题是 for 循环不仅阻止弹出窗口,还阻止应用程序中的所有其他内容 - 它与 kivy 的事件循环在同一线程中运行,因此 kivy 根本无法执行任何操作,直到已经完成了。

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

关于python - kivy:带有进度条的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25056385/

相关文章:

python - 如何在 numpy 中创建递增的多维数组

python - aiohttp如何记录访问日志?

javascript - 如何允许弹出窗口继续弹出,即使您移至另一个页面并且仅在单击按钮时停止?

android - 显示进度条,然后在我恢复 Activity 时将其隐藏

C# 进度条调用/委托(delegate)问题

python - Mysql 连接器错误 1064 - 使用 URL 更新

python - 如何连接来自同一文件的多个Excel工作表?

c# - 如何从弹出消息导航到新页面?我正在使用 Xamarin 社区工具包弹出窗口

javascript - 将文本输入到输入元素后,防止华为手机的 jquery-mobile 弹出窗口重新定位

java - 如何在java中显示一个工作但虚拟的进度条